From 5bbe78a0f353bb806a686fd97ad411fa8a9ebf5b Mon Sep 17 00:00:00 2001 From: Ebrahim Byagowi Date: Thu, 14 Mar 2019 16:49:42 -0700 Subject: [PATCH] Allow zero length ranges in sanitization (#1617) Fixes fvar table sanitization where there are no named instance by allowing zero length ranges starting from Null() address. Fixes #1607 --- src/hb-machinery.hh | 30 ++++++++++++++++-------------- test/api/fonts/Zycon.ttf | Bin 0 -> 21036 bytes test/api/test-ot-face.c | 9 +++++++++ 3 files changed, 25 insertions(+), 14 deletions(-) create mode 100644 test/api/fonts/Zycon.ttf diff --git a/src/hb-machinery.hh b/src/hb-machinery.hh index b22c2389c..ffa423d2f 100644 --- a/src/hb-machinery.hh +++ b/src/hb-machinery.hh @@ -326,27 +326,29 @@ struct hb_sanitize_context_t : } bool check_range (const void *base, - unsigned int len) const + unsigned int len) const { const char *p = (const char *) base; - bool ok = this->start <= p && - p <= this->end && - (unsigned int) (this->end - p) >= len && - this->max_ops-- > 0; + bool ok = !len || + (this->start <= p && + p <= this->end && + (unsigned int) (this->end - p) >= len && + this->max_ops-- > 0); DEBUG_MSG_LEVEL (SANITIZE, p, this->debug_depth+1, 0, - "check_range [%p..%p] (%d bytes) in [%p..%p] -> %s", - p, p + len, len, - this->start, this->end, - ok ? "OK" : "OUT-OF-RANGE"); + "check_range [%p..%p]" + " (%d bytes) in [%p..%p] -> %s", + p, p + len, len, + this->start, this->end, + ok ? "OK" : "OUT-OF-RANGE"); return likely (ok); } template bool check_range (const T *base, - unsigned int a, - unsigned int b) const + unsigned int a, + unsigned int b) const { return !hb_unsigned_mul_overflows (a, b) && this->check_range (base, a * b); @@ -354,9 +356,9 @@ struct hb_sanitize_context_t : template bool check_range (const T *base, - unsigned int a, - unsigned int b, - unsigned int c) const + unsigned int a, + unsigned int b, + unsigned int c) const { return !hb_unsigned_mul_overflows (a, b) && this->check_range (base, a * b, c); diff --git a/test/api/fonts/Zycon.ttf b/test/api/fonts/Zycon.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3a6761b8f7878021758e049c9ec79831a4268c4d GIT binary patch literal 21036 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 Xy~X=nDQIJ#06ZY#j_3gYzasw+?$LNn literal 0 HcmV?d00001 diff --git a/test/api/test-ot-face.c b/test/api/test-ot-face.c index f2d2fca4c..9ebcb4e2b 100644 --- a/test/api/test-ot-face.c +++ b/test/api/test-ot-face.c @@ -110,12 +110,21 @@ test_ot_face_empty (void) test_face (hb_face_get_empty (), 0); } +static void +test_ot_var_axis_on_zero_named_instance () +{ + hb_face_t *face = hb_test_open_font_file ("fonts/Zycon.ttf"); + g_assert (hb_ot_var_get_axis_count (face)); + hb_face_destroy (face); +} + int main (int argc, char **argv) { hb_test_init (&argc, &argv); hb_test_add (test_ot_face_empty); + hb_test_add (test_ot_var_axis_on_zero_named_instance); return hb_test_run(); }