asn1: Fix OID resolution bug
authorNicolas Williams <nico@twosigma.com>
Wed, 23 Oct 2019 23:04:28 +0000 (18:04 -0500)
committerNicolas Williams <nico@twosigma.com>
Sat, 2 Nov 2019 23:37:13 +0000 (18:37 -0500)
lib/asn1/oid_resolution.c

index b0d3902638165860341ea0b61419b05b0eb10c51..3b416e9d185a484811ca9eb994e3bab7dac8267c 100644 (file)
@@ -181,7 +181,7 @@ sort_sym_oids(int (*cmp)(const void *, const void *))
 int
 der_find_heim_oid_by_name(const char *str, const heim_oid **oid)
 {
-    size_t right = num_sym_oids;
+    size_t right = num_sym_oids - 1;
     size_t left = 0;
 
     *oid = NULL;
@@ -198,14 +198,12 @@ der_find_heim_oid_by_name(const char *str, const heim_oid **oid)
             *oid = sym_oids_sorted_by_name[mid].oid;
             return 0;
         }
-        if (cmp < 0 && right)
+        if (cmp < 0 && mid > 0) /* avoid underflow */
             right = mid - 1;
         else if (cmp < 0)
             return -1;
-        else if (mid < num_sym_oids - 1)
-            left = mid + 1;
         else
-            return -1;
+            left = mid + 1;
     }
     return -1;
 }