Skip to content

Commit 11c5a44

Browse files
authored
Merge pull request #17 from warpdotdev/andy/CORE-3580-fonts-failing-assertions-panicking
Avoid panics when calling into `dwrote` (servo#260)
2 parents b83062b + b8e03f8 commit 11c5a44

3 files changed

Lines changed: 15 additions & 12 deletions

File tree

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ pbr = "1.0"
4444
prettytable-rs = "0.10"
4545

4646
[target.'cfg(target_family = "windows")'.dependencies]
47-
dwrote = { version = "0.11", default-features = false }
47+
dwrote = { version = "^0.11.3", default-features = false }
4848

4949
[target.'cfg(target_family = "windows")'.dependencies.winapi]
5050
version = "0.3"

src/loaders/directwrite.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,9 @@ impl Font {
107107
font_index -= 1;
108108
continue;
109109
}
110-
let dwrite_font = family.get_font(family_font_index);
110+
let Ok(dwrite_font) = family.font(family_font_index) else {
111+
continue;
112+
};
111113
let dwrite_font_face = dwrite_font.create_font_face();
112114
return Ok(Font {
113115
dwrite_font,

src/sources/directwrite.rs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ impl DirectWriteSource {
4141

4242
for dwrite_family in self.system_font_collection.families_iter() {
4343
for font_index in 0..dwrite_family.get_font_count() {
44-
let dwrite_font = dwrite_family.get_font(font_index);
44+
let Ok(dwrite_font) = dwrite_family.font(font_index) else {
45+
continue;
46+
};
4547
handles.push(self.create_handle_from_dwrite_font(dwrite_font))
4648
}
4749
}
@@ -54,7 +56,7 @@ impl DirectWriteSource {
5456
Ok(self
5557
.system_font_collection
5658
.families_iter()
57-
.map(|dwrite_family| dwrite_family.name())
59+
.filter_map(|dwrite_family| dwrite_family.family_name().ok())
5860
.collect())
5961
}
6062

@@ -63,16 +65,15 @@ impl DirectWriteSource {
6365
/// TODO(pcwalton): Case-insensitivity.
6466
pub fn select_family_by_name(&self, family_name: &str) -> Result<FamilyHandle, SelectionError> {
6567
let mut family = FamilyHandle::new();
66-
let dwrite_family = match self
67-
.system_font_collection
68-
.get_font_family_by_name(family_name)
69-
{
70-
Some(dwrite_family) => dwrite_family,
71-
None => return Err(SelectionError::NotFound),
68+
let dwrite_family = match self.system_font_collection.font_family_by_name(family_name) {
69+
Ok(Some(dwrite_family)) => dwrite_family,
70+
Err(_) | Ok(None) => return Err(SelectionError::NotFound),
7271
};
7372
for font_index in 0..dwrite_family.get_font_count() {
74-
let dwrite_font = dwrite_family.get_font(font_index);
75-
family.push(self.create_handle_from_dwrite_font(dwrite_font))
73+
let Ok(dwrite_font) = dwrite_family.font(font_index) else {
74+
continue;
75+
};
76+
family.push(self.create_handle_from_dwrite_font(dwrite_font));
7677
}
7778
Ok(family)
7879
}

0 commit comments

Comments
 (0)