Verbose fail when something is wrong with hb-shape/hb-view input font file (#1059)

This checks if the blob isn't empty and uses `hb_face_count`
to see if the font file passes the simple font file sanitization
so can detect if the input is actually a font and checks also
whether input font-index is out of range.
This commit is contained in:
Ebrahim Byagowi 2018-06-17 17:04:55 +04:30 committed by GitHub
parent aa0c5df419
commit c53697d3f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -670,6 +670,17 @@ font_options_t::get_font (void) const
blob = hb_blob_create_from_file (font_file);
}
if (hb_blob_get_length (blob) == 0)
fail (false, "No such file or directory, or is empty");
unsigned int face_count = hb_face_count (blob);
if (face_count == 0)
fail (false, "Not a font file"); // most likely
if (face_index > face_count)
fail (false, "The requested font index wasn't available in the file");
/* Create the face */
hb_face_t *face = hb_face_create (blob, face_index);
hb_blob_destroy (blob);