]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
params: add additional error checking to generated param name parsers
authorPauli <ppzgs1@gmail.com>
Thu, 26 Jun 2025 00:13:25 +0000 (10:13 +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 cf652fc1920fc18856d6fc56f5e14a7df027b014..a22e411dc15743dac0d7d3c00ca5506eed2b8c84 100644 (file)
@@ -660,14 +660,17 @@ 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($strcmp(\"$suf\", s + $n) == 0", $indent0;
         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",
-               $indent1, $field;
+        print ")) {\n";
+        printf "%sif (ossl_unlikely(r->%s != NULL))\n", $indent1, $field;
+        printf "%s    return 0;\n", $indent1;
+        printf "%sr->%s = (OSSL_PARAM *)p;\n", $indent1, $field;
+        printf "%s}\n", $indent0;
         return;
     }
 
@@ -678,8 +681,9 @@ 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",
-                   $indent1, $field, $field, $field;
+            printf "%sif (ossl_unlikely(r->%s != NULL))\n", $indent1, $field;
+            printf "%s    return 0;\n", $indent1;
+            printf "%sr->%s = (OSSL_PARAM *)p;\n", $indent1, $field;
         } else {
             printf "%sbreak;\n", $indent1;
             printf "%scase '%s':", $indent0, $l;