From: Matt Caswell Date: Thu, 16 Mar 2017 17:32:32 +0000 (+0000) Subject: Fix some undefined behaviour in stack test X-Git-Tag: OpenSSL_1_1_1-pre1~1996 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3fb2c3e452c9adea24edf8b0b96f6325c0473ee9;p=openssl 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 Reviewed-by: Richard Levitte (Merged from https://github.com/openssl/openssl/pull/2971) --- diff --git a/test/stack_test.c b/test/stack_test.c index f04f6af013..4325766966 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) ? ¬present + : 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) ? ¬present + : 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)) {