Verbose fail when something is wrong with hb-shape/hb-view input font file (#1059)
authorEbrahim Byagowi <ebrahim@gnu.org>
Sun, 17 Jun 2018 12:34:55 +0000 (17:04 +0430)
committerGitHub <noreply@github.com>
Sun, 17 Jun 2018 12:34:55 +0000 (17:04 +0430)
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.

util/options.cc

index 4c65735..299466f 100644 (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);