diff options
author | Stef Walter <stefw@collabora.co.uk> | 2011-10-10 12:08:35 +0200 |
---|---|---|
committer | Stef Walter <stefw@collabora.co.uk> | 2011-10-10 12:16:03 +0200 |
commit | d5a004ded8a0acdb7aa2100b8e116f19d0d9e402 (patch) | |
tree | e42565fb077515a72a417b06afb5dae5047246cd /tests | |
parent | 591c1c14f2ebbcbc3f621456e31e2af1d26820b8 (diff) |
Don't allow recursive calling of C_Initialize on a given module.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 10 | ||||
-rw-r--r-- | tests/test-recursive.c | 98 |
2 files changed, 106 insertions, 2 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index 71e31a3..65828bf 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -16,20 +16,26 @@ noinst_PROGRAMS = \ conf-test \ uri-test \ pin-test \ + print-messages \ test-fork \ - print-messages + test-recursive test_fork_SOURCES = \ test-fork.c \ mock-module.c mock-module.h +test_recursive_SOURCES = \ + test-recursive.c \ + mock-module.c mock-module.h + check-am: ./hash-test ./ptr-array-test ./conf-test ./uri-test ./pin-test - ./p11-test + ./test-fork + ./test-recursive EXTRA_DIST = \ cutest \ diff --git a/tests/test-recursive.c b/tests/test-recursive.c new file mode 100644 index 0000000..97e692e --- /dev/null +++ b/tests/test-recursive.c @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2011, Collabora Ltd. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above + * copyright notice, this list of conditions and the + * following disclaimer. + * * Redistributions in binary form must reproduce the + * above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * * The names of contributors to this software may not be + * used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF + * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * Author: Stef Walter <stefw@collabora.co.uk> + */ + +#include "config.h" +#include "CuTest.h" + +#include <sys/types.h> +#include <sys/wait.h> + +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include "p11-kit/p11-kit.h" + +#include "mock-module.h" + +CK_FUNCTION_LIST module; + +static CK_RV +mock_C_Initialize__with_recursive (CK_VOID_PTR init_args) +{ + CK_RV rv; + + rv = mock_C_Initialize (init_args); + assert (rv == CKR_OK); + + /* Recursively initialize, this is broken */ + return p11_kit_initialize_module (&module); +} + +static void +test_recursive_initialization (CuTest *tc) +{ + CK_RV rv; + + /* Build up our own function list */ + memcpy (&module, &mock_module_no_slots, sizeof (CK_FUNCTION_LIST)); + module.C_Initialize = mock_C_Initialize__with_recursive; + + rv = p11_kit_initialize_module (&module); + CuAssertTrue (tc, rv == CKR_FUNCTION_FAILED); +} + +int +main (void) +{ + CuString *output = CuStringNew (); + CuSuite* suite = CuSuiteNew (); + int ret; + + SUITE_ADD_TEST (suite, test_recursive_initialization); + + CuSuiteRun (suite); + CuSuiteSummary (suite, output); + CuSuiteDetails (suite, output); + printf ("%s\n", output->buffer); + ret = suite->failCount; + CuSuiteDelete (suite); + CuStringDelete (output); + + return ret; +} + +#include "CuTest.c" |