]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Add valid single field tests master
authorGreensi7 <adam.tabak04@gmail.com>
Fri, 7 Aug 2026 22:09:15 +0000 (00:09 +0200)
committerAndrew Dinh <andrewd@openssl.org>
Sun, 9 Aug 2026 04:06:02 +0000 (11:06 +0700)
Reviewed-by: Viktor Dukhovni <viktor@openssl.org>
Reviewed-by: Andrew Dinh <andrewd@openssl.org>
MergeDate: Sun Aug  9 04:06:52 2026
(Merged from https://github.com/openssl/openssl/pull/32181)

test/v3ext.c

index 96844cb3ebfb3eaf7f14297e2daa8f891b904a7f..27edbc4a9d23e50041d7f4bf50da556baf92bec1 100644 (file)
 
 static const char *infile;
 
-static const char *duplicate_field_configs[] = {
-    "[default]\nbasicConstraints=CA:true,CA:false\n",
-    "[default]\nbasicConstraints=pathlen:0,pathlen:1\n",
-    "[default]\nbasicAttConstraints=authority:true,authority:false\n",
-    "[default]\nbasicAttConstraints=pathlen:0,pathlen:1\n",
-    "[default]\npolicyConstraints=requireExplicitPolicy:0,requireExplicitPolicy:1\n",
-    "[default]\npolicyConstraints=inhibitPolicyMapping:0,inhibitPolicyMapping:1\n",
+static const struct {
+    const char *single; /* Valid */
+    const char *duplicate; /* Invalid */
+} duplicate_field_configs[] = {
+    { "[default]\nbasicConstraints=CA:true\n",
+        "[default]\nbasicConstraints=CA:true,CA:false\n" },
+    { "[default]\nbasicConstraints=pathlen:0\n",
+        "[default]\nbasicConstraints=pathlen:0,pathlen:1\n" },
+    { "[default]\nbasicAttConstraints=authority:true\n",
+        "[default]\nbasicAttConstraints=authority:true,authority:false\n" },
+    { "[default]\nbasicAttConstraints=pathlen:0\n",
+        "[default]\nbasicAttConstraints=pathlen:0,pathlen:1\n" },
+    { "[default]\npolicyConstraints=requireExplicitPolicy:0\n",
+        "[default]\npolicyConstraints=requireExplicitPolicy:0,requireExplicitPolicy:1\n" },
+    { "[default]\npolicyConstraints=inhibitPolicyMapping:0\n",
+        "[default]\npolicyConstraints=inhibitPolicyMapping:0,inhibitPolicyMapping:1\n" },
 };
 
-static int test_duplicate_field(int idx)
+static int test_field_config(const char *config, int should_pass)
 {
-    const char *config = duplicate_field_configs[idx];
     size_t config_len = strlen(config);
     BIO *in = NULL;
     CONF *conf = NULL;
     X509 *cert = NULL;
     X509V3_CTX ctx;
-    int ret = 0;
+    int conf_res, ret = 0;
 
-    ERR_clear_error();
     if (!TEST_ptr(in = BIO_new(BIO_s_mem()))
         || !TEST_int_eq(BIO_write(in, config, (int)config_len),
             (int)config_len)
@@ -51,11 +58,11 @@ static int test_duplicate_field(int idx)
 
     X509V3_set_ctx(&ctx, cert, cert, NULL, NULL, 0);
     X509V3_set_nconf(&ctx, conf);
-    ERR_clear_error();
-    if (!TEST_false(X509V3_EXT_add_nconf(conf, &ctx, "default", cert)))
-        goto end;
 
-    if (!TEST_err_r(ERR_LIB_X509V3, X509V3_R_DUPLICATE_FIELD))
+    ERR_clear_error();
+    conf_res = X509V3_EXT_add_nconf(conf, &ctx, "default", cert);
+    if (!TEST_int_eq(conf_res, should_pass)
+        || (!should_pass && !TEST_err_r(ERR_LIB_X509V3, X509V3_R_DUPLICATE_FIELD)))
         goto end;
 
     ret = 1;
@@ -67,6 +74,12 @@ end:
     return ret;
 }
 
+static int test_duplicate_field(int idx)
+{
+    return test_field_config(duplicate_field_configs[idx].single, 1)
+        && test_field_config(duplicate_field_configs[idx].duplicate, 0);
+}
+
 static int test_pathlen(void)
 {
     X509 *x = NULL;