[openssl-commits] [openssl] master update

Matt Caswell matt at openssl.org
Fri Mar 17 10:13:32 UTC 2017


The branch master has been updated
       via  3fb2c3e452c9adea24edf8b0b96f6325c0473ee9 (commit)
      from  508ee8f5ffc5a3ab1bb10b14c0331393d938326f (commit)


- Log -----------------------------------------------------------------
commit 3fb2c3e452c9adea24edf8b0b96f6325c0473ee9
Author: Matt Caswell <matt at openssl.org>
Date:   Thu Mar 16 17:32:32 2017 +0000

    Fix some undefined behaviour in stack test
    
    At one point the stack was passing a pointer of the element *before* an
    array which is undefined.
    
    Reviewed-by: Rich Salz <rsalz at openssl.org>
    Reviewed-by: Richard Levitte <levitte at openssl.org>
    (Merged from https://github.com/openssl/openssl/pull/2971)

-----------------------------------------------------------------------

Summary of changes:
 test/stack_test.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/test/stack_test.c b/test/stack_test.c
index f04f6af..4325766 100644
--- a/test/stack_test.c
+++ b/test/stack_test.c
@@ -57,6 +57,7 @@ static int int_compare(const int *const *a, const int *const *b)
 static int test_int_stack(void)
 {
     static int v[] = { 1, 2, -4, 16, 999, 1, -173, 1, 9 };
+    static int notpresent = -1;
     const int n = OSSL_NELEM(v);
     static struct {
         int value;
@@ -108,18 +109,26 @@ static int test_int_stack(void)
         }
 
     /* find unsorted -- the pointers are compared */
-    for (i = 0; i < n_finds; i++)
-        if (sk_sint_find(s, v + finds[i].unsorted) != finds[i].unsorted) {
+    for (i = 0; i < n_finds; i++) {
+        int *val = (finds[i].unsorted == -1) ? &notpresent
+                                             : v + finds[i].unsorted;
+
+        if (sk_sint_find(s, val) != finds[i].unsorted) {
             fprintf(stderr, "test int unsorted find %d\n", i);
             goto end;
         }
+    }
 
     /* find_ex unsorted */
-    for (i = 0; i < n_finds; i++)
-        if (sk_sint_find_ex(s, v + finds[i].unsorted) != finds[i].unsorted) {
+    for (i = 0; i < n_finds; i++) {
+        int *val = (finds[i].unsorted == -1) ? &notpresent
+                                             : v + finds[i].unsorted;
+
+        if (sk_sint_find_ex(s, val) != finds[i].unsorted) {
             fprintf(stderr, "test int unsorted find_ex %d\n", i);
             goto end;
         }
+    }
 
     /* sorting */
     if (sk_sint_is_sorted(s)) {


More information about the openssl-commits mailing list