X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=test%2Fx509aux.c;h=d170cf7e9e6a0ad9701354571b5767c8ede55c84;hp=7bfacfda3aeb0684f74e8b028b1512d9d42591ad;hb=HEAD;hpb=4f58c6b9febddb5bb074dff44bdc4c013cdb9544 diff --git a/test/x509aux.c b/test/x509aux.c index 7bfacfda3a..7335e04771 100644 --- a/test/x509aux.c +++ b/test/x509aux.c @@ -1,7 +1,7 @@ /* - * Copyright 2016-2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. * - * Licensed under the OpenSSL licenses, (the "License"); + * Licensed under the Apache License 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * https://www.openssl.org/source/license.html @@ -16,13 +16,8 @@ #include #include #include -#include "e_os.h" #include "testutil.h" - -/* List of files, from argv */ -static char **files; - static int test_certs(int num) { int c; @@ -31,19 +26,19 @@ static int test_certs(int num) unsigned char *data = 0; long len; typedef X509 *(*d2i_X509_t)(X509 **, const unsigned char **, long); - typedef int (*i2d_X509_t)(X509 *, unsigned char **); + typedef int (*i2d_X509_t)(const X509 *, unsigned char **); int err = 0; - BIO *fp = BIO_new_file(files[num], "r"); + BIO *fp = BIO_new_file(test_get_argument(num), "r"); if (!TEST_ptr(fp)) return 0; for (c = 0; !err && PEM_read_bio(fp, &name, &header, &data, &len); ++c) { const int trusted = (strcmp(name, PEM_STRING_X509_TRUSTED) == 0); - d2i_X509_t d2i = trusted ? d2i_X509_AUX : d2i_X509; i2d_X509_t i2d = trusted ? i2d_X509_AUX : i2d_X509; X509 *cert = NULL; + X509 *reuse = NULL; const unsigned char *p = data; unsigned char *buf = NULL; unsigned char *bufp; @@ -95,6 +90,19 @@ static int test_certs(int num) err = 1; goto next; } + p = buf; + reuse = d2i(NULL, &p, enclen); + if (reuse == NULL) { + TEST_error("second d2i call failed for %s", name); + err = 1; + goto next; + } + err = X509_cmp(reuse, cert); + if (err != 0) { + TEST_error("X509_cmp for %s resulted in %d", name, err); + err = 1; + goto next; + } OPENSSL_free(buf); buf = NULL; @@ -137,6 +145,7 @@ static int test_certs(int num) */ next: X509_free(cert); + X509_free(reuse); OPENSSL_free(buf); OPENSSL_free(name); OPENSSL_free(header); @@ -156,14 +165,21 @@ static int test_certs(int num) return 0; } -int test_main(int argc, char *argv[]) +OPT_TEST_DECLARE_USAGE("certfile...\n") + +int setup_tests(void) { - if (argc < 2) { - TEST_error("usage: %s certfile...", argv[0]); + size_t n; + + if (!test_skip_common_options()) { + TEST_error("Error parsing test options\n"); return 0; } - files = &argv[1]; - ADD_ALL_TESTS(test_certs, argc - 1); - return run_tests(argv[0]); + n = test_get_argument_count(); + if (n == 0) + return 0; + + ADD_ALL_TESTS(test_certs, (int)n); + return 1; }