Skip to content

Commit

Permalink
Add a test for OSSL_ERR_STATE_save_to_mark()
Browse files Browse the repository at this point in the history
Add a test for the recently added function OSSL_ERR_STATE_save_to_mark().
We can just modify the existing test_save_restore() to add this in.

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Hugo Landau <hlandau@openssl.org>
(Merged from #22368)
  • Loading branch information
mattcaswell committed Oct 23, 2023
1 parent b13f3f1 commit d3bb8fe
Showing 1 changed file with 32 additions and 13 deletions.
45 changes: 32 additions & 13 deletions test/errtest.c
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,12 @@ static int test_clear_error(void)
return res;
}

static int test_save_restore(void)
/*
* Test saving and restoring error state.
* Test 0: Save using OSSL_ERR_STATE_save()
* Test 1: Save using OSSL_ERR_STATE_save_to_mark()
*/
static int test_save_restore(int idx)
{
ERR_STATE *es;
int res = 0, i, flags = -1;
Expand All @@ -350,15 +355,25 @@ static int test_save_restore(void)
if (!TEST_ulong_gt(mallocfail, 0))
goto err;

if (idx == 1 && !TEST_int_eq(ERR_set_mark(), 1))
goto err;

ERR_raise_data(ERR_LIB_CRYPTO, ERR_R_INTERNAL_ERROR, testdata);
interr = ERR_peek_last_error();
if (!TEST_ulong_ne(mallocfail, ERR_peek_last_error()))
goto err;

OSSL_ERR_STATE_save(es);
if (idx == 0) {
OSSL_ERR_STATE_save(es);

if (!TEST_ulong_eq(ERR_peek_last_error(), 0))
goto err;
if (!TEST_ulong_eq(ERR_peek_last_error(), 0))
goto err;
} else {
OSSL_ERR_STATE_save_to_mark(es);

if (!TEST_ulong_ne(ERR_peek_last_error(), 0))
goto err;
}

for (i = 0; i < 2; i++) {
OSSL_ERR_STATE_restore(es);
Expand All @@ -374,21 +389,25 @@ static int test_save_restore(void)
OSSL_ERR_STATE_restore(es);

/* verify them all */
if (!TEST_ulong_eq(ERR_get_error_all(NULL, NULL, NULL,
&data, &flags), mallocfail)
|| !TEST_int_ne(flags, ERR_TXT_STRING | ERR_TXT_MALLOCED))
goto err;
if (idx == 0 || i == 0) {
if (!TEST_ulong_eq(ERR_get_error_all(NULL, NULL, NULL,
&data, &flags), mallocfail)
|| !TEST_int_ne(flags, ERR_TXT_STRING | ERR_TXT_MALLOCED))
goto err;
}

if (!TEST_ulong_eq(ERR_get_error_all(NULL, NULL, NULL,
&data, &flags), interr)
|| !TEST_str_eq(data, testdata)
|| !TEST_int_eq(flags, ERR_TXT_STRING | ERR_TXT_MALLOCED))
goto err;

if (!TEST_ulong_eq(ERR_get_error_all(NULL, NULL, NULL,
&data, &flags), mallocfail)
|| !TEST_int_ne(flags, ERR_TXT_STRING | ERR_TXT_MALLOCED))
goto err;
if (idx == 0) {
if (!TEST_ulong_eq(ERR_get_error_all(NULL, NULL, NULL,
&data, &flags), mallocfail)
|| !TEST_int_ne(flags, ERR_TXT_STRING | ERR_TXT_MALLOCED))
goto err;
}

if (!TEST_ulong_eq(ERR_get_error_all(NULL, NULL, NULL,
&data, &flags), interr)
Expand All @@ -415,7 +434,7 @@ int setup_tests(void)
ADD_TEST(test_print_error_format);
#endif
ADD_TEST(test_marks);
ADD_TEST(test_save_restore);
ADD_ALL_TESTS(test_save_restore, 2);
ADD_TEST(test_clear_error);
return 1;
}

0 comments on commit d3bb8fe

Please sign in to comment.