From 3cca3e29f9c694585783074ba5fcc90dfd58c1f7 Mon Sep 17 00:00:00 2001 From: Rich Salz Date: Tue, 28 Feb 2017 10:53:28 -0500 Subject: [PATCH] Exdata test was never enabled. Reviewed-by: Richard Levitte (Merged from https://github.com/openssl/openssl/pull/2787) (cherry picked from commit 629192c1b9f17965e0a6b73229b7b1e004bfbd98) --- test/build.info | 6 +++- test/exdatatest.c | 59 ++++++++++++++++++----------------- test/recipes/03-test_exdata.t | 12 +++++++ 3 files changed, 48 insertions(+), 29 deletions(-) create mode 100644 test/recipes/03-test_exdata.t diff --git a/test/build.info b/test/build.info index 0c2c909b31..641505d241 100644 --- a/test/build.info +++ b/test/build.info @@ -1,7 +1,7 @@ IF[{- !$disabled{tests} -}] PROGRAMS_NO_INST=\ aborttest \ - sanitytest bntest \ + sanitytest exdatatest bntest \ ectest ecdsatest ecdhtest gmdifftest pbelutest ideatest \ md2test md4test md5test \ hmactest wp_test \ @@ -26,6 +26,10 @@ IF[{- !$disabled{tests} -}] INCLUDE[sanitytest]=../include DEPEND[sanitytest]=../libcrypto + SOURCE[exdatatest]=exdatatest.c + INCLUDE[exdatatest]=../include + DEPEND[exdatatest]=../libcrypto + SOURCE[bntest]=bntest.c INCLUDE[bntest]=.. ../crypto/include ../include DEPEND[bntest]=../libcrypto diff --git a/test/exdatatest.c b/test/exdatatest.c index 8e35068406..e82fdbfaea 100644 --- a/test/exdatatest.c +++ b/test/exdatatest.c @@ -1,5 +1,5 @@ /* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2015-2017 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -8,68 +8,66 @@ */ #include -#include #include #include +#include #include -static long sargl; -static void *sargp; -static int sidx; +static long saved_argl; +static void *saved_argp; +static int saved_idx; static void exnew(void *parent, void *ptr, CRYPTO_EX_DATA *ad, int idx, long argl, void *argp) { - assert(idx == sidx); - assert(argl == sargl); - assert(argp == sargp); + assert(idx == saved_idx); + assert(argl == saved_argl); + assert(argp == saved_argp); } -static int exdup(CRYPTO_EX_DATA *to, CRYPTO_EX_DATA *from, +static int exdup(CRYPTO_EX_DATA *to, const CRYPTO_EX_DATA *from, void *from_d, int idx, long argl, void *argp) { - assert(idx == sidx); - assert(argl == sargl); - assert(argp == sargp); + assert(idx == saved_idx); + assert(argl == saved_argl); + assert(argp == saved_argp); return 0; } static void exfree(void *parent, void *ptr, CRYPTO_EX_DATA *ad, int idx, long argl, void *argp) { - assert(idx == sidx); - assert(argl == sargl); - assert(argp == sargp); + assert(idx == saved_idx); + assert(argl == saved_argl); + assert(argp == saved_argp); } typedef struct myobj_st { CRYPTO_EX_DATA ex_data; int id; + int st; } MYOBJ; static MYOBJ *MYOBJ_new() { static int count = 0; MYOBJ *obj = OPENSSL_malloc(sizeof(*obj)); - int st; obj->id = ++count; - st = CRYPTO_new_ex_data(CRYPTO_EX_INDEX_APP, obj, &obj->ex_data); - assert(st != 0); + obj->st = CRYPTO_new_ex_data(CRYPTO_EX_INDEX_APP, obj, &obj->ex_data); + assert(obj->st != 0); return obj; } static void MYOBJ_sethello(MYOBJ *obj, char *cp) { - int st; - - st = CRYPTO_set_ex_data(&obj->ex_data, sidx, cp); - assert(st != 0); + obj->st = CRYPTO_set_ex_data(&obj->ex_data, saved_idx, cp); + assert(obj->st != 0); } static char *MYOBJ_gethello(MYOBJ *obj) { - return CRYPTO_get_ex_data(&obj->ex_data, sidx); + return CRYPTO_get_ex_data(&obj->ex_data, saved_idx); } static void MYOBJ_free(MYOBJ *obj) @@ -85,20 +83,25 @@ int main() char *p; p = strdup("hello world"); - sargl = 21; - sargp = malloc(1); - sidx = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_APP, sargl, sargp, - exnew, exdup, exfree); + saved_argl = 21; + saved_argp = malloc(1); + saved_idx = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_APP, + saved_argl, saved_argp, + exnew, exdup, exfree); t1 = MYOBJ_new(); t2 = MYOBJ_new(); MYOBJ_sethello(t1, p); cp = MYOBJ_gethello(t1); assert(cp == p); + if (cp != p) + return 1; cp = MYOBJ_gethello(t2); assert(cp == NULL); + if (cp != NULL) + return 1; MYOBJ_free(t1); MYOBJ_free(t2); - free(sargp); + free(saved_argp); free(p); return 0; } diff --git a/test/recipes/03-test_exdata.t b/test/recipes/03-test_exdata.t new file mode 100644 index 0000000000..da66f95926 --- /dev/null +++ b/test/recipes/03-test_exdata.t @@ -0,0 +1,12 @@ +#! /usr/bin/env perl +# Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + + +use OpenSSL::Test::Simple; + +simple_test("test_exdata", "exdatatest"); -- 2.25.1