diff options
author | Richard Levitte <levitte@openssl.org> | 2024-01-23 13:17:31 +0100 |
---|---|---|
committer | Tomas Mraz <tomas@openssl.org> | 2024-01-25 16:36:55 +0100 |
commit | ea6268cfceaba24328d66bd14bfc97c4fac14a58 (patch) | |
tree | 863e8f4e99fe549205c7a22370b0c52ab65a0a76 /test/params_test.c | |
parent | Add some tests for various PKCS12 files with NULL ContentInfo (diff) | |
download | openssl-ea6268cfceaba24328d66bd14bfc97c4fac14a58.tar.xz openssl-ea6268cfceaba24328d66bd14bfc97c4fac14a58.zip |
Have OSSL_PARAM_allocate_from_text() fail on odd number of hex digits
The failure would be caught later on, so this went unnoticed, until someone
tried with just one hex digit, which was simply ignored.
Fixes #23373
Reviewed-by: Tom Cosgrove <tom.cosgrove@arm.com>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/23374)
Diffstat (limited to 'test/params_test.c')
-rw-r--r-- | test/params_test.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/test/params_test.c b/test/params_test.c index 614c8debb7..a4b17ddf8f 100644 --- a/test/params_test.c +++ b/test/params_test.c @@ -15,6 +15,7 @@ #include <string.h> #include <openssl/bn.h> #include <openssl/core.h> +#include <openssl/err.h> #include <openssl/params.h> #include "internal/numbers.h" #include "internal/nelem.h" @@ -558,6 +559,7 @@ static const OSSL_PARAM params_from_text[] = { /* Arbitrary size buffer. Make sure the result fits in a long */ OSSL_PARAM_DEFN("num", OSSL_PARAM_INTEGER, NULL, 0), OSSL_PARAM_DEFN("unum", OSSL_PARAM_UNSIGNED_INTEGER, NULL, 0), + OSSL_PARAM_DEFN("octets", OSSL_PARAM_OCTET_STRING, NULL, 0), OSSL_PARAM_END, }; @@ -655,14 +657,56 @@ static int check_int_from_text(const struct int_from_text_test_st a) return a.expected_res; } +static int check_octetstr_from_hexstr(void) +{ + OSSL_PARAM param; + static const char *values[] = { "", "F", "FF", "FFF", "FFFF", NULL }; + int i; + int errcnt = 0; + + /* Test odd vs even number of hex digits */ + for (i = 0; values[i] != NULL; i++) { + int expected = (strlen(values[i]) % 2) != 1; + int result; + + ERR_clear_error(); + memset(¶m, 0, sizeof(param)); + if (expected) + result = + TEST_true(OSSL_PARAM_allocate_from_text(¶m, + params_from_text, + "hexoctets", values[i], 0, + NULL)); + else + result = + TEST_false(OSSL_PARAM_allocate_from_text(¶m, + params_from_text, + "hexoctets", values[i], 0, + NULL)); + if (!result) { + TEST_error("unexpected OSSL_PARAM_allocate_from_text() %s for 'octets' \"%s\"", + (expected ? "failure" : "success"), values[i]); + errcnt++; + } + OPENSSL_free(param.data); + } + return errcnt == 0; +} + static int test_allocate_from_text(int i) { return check_int_from_text(int_from_text_test_cases[i]); } +static int test_more_allocate_from_text(void) +{ + return check_octetstr_from_hexstr(); +} + int setup_tests(void) { ADD_ALL_TESTS(test_case, OSSL_NELEM(test_cases)); ADD_ALL_TESTS(test_allocate_from_text, OSSL_NELEM(int_from_text_test_cases)); + ADD_TEST(test_more_allocate_from_text); return 1; } |