]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
coverity 1403324 negative array index: check for finding an unknown value and error...
authorPauli <paul.dale@oracle.com>
Thu, 8 Oct 2020 23:36:50 +0000 (09:36 +1000)
committerPauli <paul.dale@oracle.com>
Mon, 12 Oct 2020 00:27:16 +0000 (10:27 +1000)
Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
(Merged from https://github.com/openssl/openssl/pull/13091)

test/lhash_test.c

index c9dc8b4cee2e321c05efaddd5316f9e9361940be..a9aac5fb8615d9af9ae2a0be4631bf5aeed85c33 100644 (file)
@@ -33,6 +33,7 @@ static int int_tests[] = { 65537, 13, 1, 3, -5, 6, 7, 4, -10, -12, -14, 22, 9,
                            -17, 16, 17, -23, 35, 37, 173, 11 };
 static const unsigned int n_int_tests = OSSL_NELEM(int_tests);
 static short int_found[OSSL_NELEM(int_tests)];
+static short int_not_found;
 
 static unsigned long int int_hash(const int *p)
 {
@@ -56,12 +57,22 @@ static int int_find(int n)
 
 static void int_doall(int *v)
 {
-    int_found[int_find(*v)]++;
+    const int n = int_find(*v);
+
+    if (n < 0)
+        int_not_found++;
+    else
+        int_found[n]++;
 }
 
 static void int_doall_arg(int *p, short *f)
 {
-    f[int_find(*p)]++;
+    const int n = int_find(*p);
+
+    if (n < 0)
+        int_not_found++;
+    else
+        f[n]++;
 }
 
 IMPLEMENT_LHASH_DOALL_ARG(int, short);
@@ -124,7 +135,12 @@ static int test_int_lhash(void)
 
     /* do_all */
     memset(int_found, 0, sizeof(int_found));
+    int_not_found = 0;
     lh_int_doall(h, &int_doall);
+    if (!TEST_int_eq(int_not_found, 0)) {
+        TEST_info("lhash int doall encountered a not found condition");
+        goto end;
+    }
     for (i = 0; i < n_int_tests; i++)
         if (!TEST_int_eq(int_found[i], 1)) {
             TEST_info("lhash int doall %d", i);
@@ -133,7 +149,12 @@ static int test_int_lhash(void)
 
     /* do_all_arg */
     memset(int_found, 0, sizeof(int_found));
+    int_not_found = 0;
     lh_int_doall_short(h, int_doall_arg, int_found);
+    if (!TEST_int_eq(int_not_found, 0)) {
+        TEST_info("lhash int doall arg encountered a not found condition");
+        goto end;
+    }
     for (i = 0; i < n_int_tests; i++)
         if (!TEST_int_eq(int_found[i], 1)) {
             TEST_info("lhash int doall arg %d", i);