diff options
author | Richard Levitte <levitte@openssl.org> | 2021-07-08 13:33:28 +0200 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2021-07-10 12:05:50 +0200 |
commit | 12e9b74c513a8ed3c1c260cf25221a465ae14b84 (patch) | |
tree | 14696c8af07f7b27035687ef085964aef8fb4894 | |
parent | 6eba6a9b35e97f8fc9fee33a7bdfff0bed04a6dc (diff) |
TEST: Check that i2d refuses to encode non-optional items with no content
The test case creates an RSA public key and tries to pass it through
i2d_PrivateKey(). This SHOULD fail, since the private bits are missing.
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/16027)
-rw-r--r-- | test/asn1_internal_test.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/test/asn1_internal_test.c b/test/asn1_internal_test.c index 865e058421..146d8a8994 100644 --- a/test/asn1_internal_test.c +++ b/test/asn1_internal_test.c @@ -107,9 +107,47 @@ static int test_standard_methods(void) return 0; } +/********************************************************************** + * + * Test of that i2d fail on non-existing non-optional items + * + ***/ + +#include <openssl/rsa.h> + +static int test_empty_nonoptional_content(void) +{ + RSA *rsa = NULL; + BIGNUM *n = NULL; + BIGNUM *e = NULL; + int ok = 0; + + if (!TEST_ptr(rsa = RSA_new()) + || !TEST_ptr(n = BN_new()) + || !TEST_ptr(e = BN_new()) + || !TEST_true(RSA_set0_key(rsa, n, e, NULL))) + goto end; + + n = e = NULL; /* They are now "owned" by |rsa| */ + + /* + * This SHOULD fail, as we're trying to encode a public key as a private + * key. The private key bits MUST be present for a proper RSAPrivateKey. + */ + if (TEST_int_le(i2d_RSAPrivateKey(rsa, NULL), 0)) + ok = 1; + + end: + RSA_free(rsa); + BN_free(n); + BN_free(e); + return ok; +} + int setup_tests(void) { ADD_TEST(test_tbl_standard); ADD_TEST(test_standard_methods); + ADD_TEST(test_empty_nonoptional_content); return 1; } |