Improve overflow avoidance
authorBehdad Esfahbod <behdad@behdad.org>
Tue, 15 Jan 2019 18:58:19 +0000 (13:58 -0500)
committerBehdad Esfahbod <behdad@behdad.org>
Tue, 15 Jan 2019 18:58:19 +0000 (13:58 -0500)
Better fix for 480406cd3ef9e5ab8476ddfa04498bf23906c508
This way we behave the same on 32bit and 64bit archs.

src/hb-machinery.hh

index 07511e1..f1ac848 100644 (file)
@@ -268,16 +268,12 @@ struct hb_sanitize_context_t :
     if (!obj) return;
 
     const char *obj_start = (const char *) obj;
-    const char *obj_end = (const char *) obj + obj->get_size ();
-
-    if (unlikely (obj_end < obj_start /* Overflow. */ ||
-                 obj_end < this->start ||
-                 this->end < obj_start))
+    if (unlikely (obj_start < this->start || this->end <= obj_start))
       this->start = this->end = nullptr;
     else
     {
-      this->start = MAX (this->start, obj_start);
-      this->end   = MIN (this->end  , obj_end  );
+      this->start = obj_start;
+      this->end   = obj_start + MIN<uintptr_t> (this->end - obj_start, obj->get_size ());
     }
   }