]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
params: generated decoder functions return an error state on failure
authorPauli <ppzgs1@gmail.com>
Wed, 25 Jun 2025 00:50:15 +0000 (10:50 +1000)
committerTomas Mraz <tomas@openssl.org>
Thu, 31 Jul 2025 18:19:39 +0000 (20:19 +0200)
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/27923)

util/perl/OpenSSL/paramnames.pm

index 203c6f73b31063229a1a601cceca63237d903bcf..cf652fc1920fc18856d6fc56f5e14a7df027b014 100644 (file)
@@ -651,7 +651,7 @@ sub generate_decoder_from_trie {
     my $trieref = shift;
     my $identmap = shift;
     my $idt = "    ";
-    my $indent0 = $idt x ($n + 2);
+    my $indent0 = $idt x ($n + 3);
     my $indent1 = $indent0 . $idt;
     my $strcmp = $case_sensitive ? 'strcmp' : 'strcasecmp';
     my $field;
@@ -660,13 +660,13 @@ sub generate_decoder_from_trie {
         my $suf = $trieref->{'suffix'};
 
         $field = $identmap->{$trieref->{'name'}};
-        printf "%sif (ossl_likely(r.%s == NULL && $strcmp(\"$suf\", s + $n) == 0", $indent0, $field;
+        printf "%sif (ossl_likely(r->%s == NULL && $strcmp(\"$suf\", s + $n) == 0", $indent0, $field;
         if (not $case_sensitive) {
             $suf =~ tr/_/-/;
             print " || $strcmp(\"$suf\", s + $n) == 0"
                 if ($suf ne $trieref->{'suffix'});
         }
-        printf "))\n%sr.%s = (OSSL_PARAM *)p;\n",
+        printf "))\n%sr->%s = (OSSL_PARAM *)p;\n",
                $indent1, $field;
         return;
     }
@@ -678,7 +678,7 @@ sub generate_decoder_from_trie {
             $field = $identmap->{$trieref->{'val'}};
             printf "%sbreak;\n", $indent1;
             printf "%scase '\\0':\n", $indent0;
-            printf "%sr.%s = ossl_likely(r.%s == NULL) ? (OSSL_PARAM *)p : r.%s;\n",
+            printf "%sr->%s = ossl_likely(r->%s == NULL) ? (OSSL_PARAM *)p : r->%s;\n",
                    $indent1, $field, $field, $field;
         } else {
             printf "%sbreak;\n", $indent1;
@@ -794,15 +794,15 @@ sub output_param_decoder {
     locate_long_endings(\%t);
 
     printf "#ifndef %s_decoder\n", $decoder_name_base;
-    printf "static struct %s_st\n%s_decoder(const OSSL_PARAM params[]) {\n",
-        $decoder_name_base, $decoder_name_base;
-    printf "    struct %s_st r;\n", $decoder_name_base;
-    print "    const OSSL_PARAM *p;\n";
+    printf "static int %s_decoder\n", $decoder_name_base;
+    printf "    (const OSSL_PARAM *p, struct %s_st *r)\n", $decoder_name_base;
+    print "{\n";
     print "    const char *s;\n\n";
-    print "    memset(&r, 0, sizeof(r));\n";
-    print "    for (p = params; (s = p->key) != NULL; p++)\n";
+    print "    memset(r, 0, sizeof(*r));\n";
+    print "    if (p != NULL)\n";
+    print "        for (; (s = p->key) != NULL; p++)\n";
     generate_decoder_from_trie(0, \%t, \%prms);
-    print "    return r;\n";
+    print "    return 1;\n";
     print "}\n#endif\n";
     print "/* End of machine generated */";
 }