Commit 351fc4b4a4e6ac8036df7248ab6c24129ca13269

Werner Lemberg 2016-03-29T09:13:13

[pfr] Fix binary search (#47514). * src/pfr/pfrsbit.c (pfr_lookup_bitmap_data): Handle border conditions correctly.

diff --git a/ChangeLog b/ChangeLog
index e7e92c1..2473546 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2016-03-29  Werner Lemberg  <wl@gnu.org>
 
+	[pfr] Fix binary search (#47514).
+
+	* src/pfr/pfrsbit.c (pfr_lookup_bitmap_data): Handle border
+	conditions correctly.
+
+2016-03-29  Werner Lemberg  <wl@gnu.org>
+
 	[pfr] Minor.
 
 	* src/pfr/pfrsbit.c (pfr_lookup_bitmap_data): Replace `left',
diff --git a/src/pfr/pfrsbit.c b/src/pfr/pfrsbit.c
index abdbb20..68da033 100644
--- a/src/pfr/pfrsbit.c
+++ b/src/pfr/pfrsbit.c
@@ -364,13 +364,12 @@
       else
         code = PFR_NEXT_BYTE( buff );
 
-      if ( code == char_code )
-        goto Found_It;
-
-      if ( code < char_code )
-        min = mid;
-      else
+      if ( char_code < code )
         max = mid;
+      else if ( char_code > code )
+        min = mid + 1;
+      else
+        goto Found_It;
     }
 
   Fail:
diff --git a/src/sfnt/ttcmap.c b/src/sfnt/ttcmap.c
index 8f9e3c1..01255a8 100644
--- a/src/sfnt/ttcmap.c
+++ b/src/sfnt/ttcmap.c
@@ -3104,7 +3104,7 @@
 
       if ( char_code < start )
         max = mid;
-      else if ( char_code > start+cnt )
+      else if ( char_code > start + cnt )
         min = mid + 1;
       else
         return TRUE;