From e44d7cb43a01e249971a267d25d8f06611b41bb7 Mon Sep 17 00:00:00 2001 From: Pauli Date: Thu, 26 Jun 2025 10:13:25 +1000 Subject: [PATCH] params: add additional error checking to generated param name parsers Reviewed-by: Shane Lontis Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/27923) --- util/perl/OpenSSL/paramnames.pm | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/util/perl/OpenSSL/paramnames.pm b/util/perl/OpenSSL/paramnames.pm index cf652fc1920..a22e411dc15 100644 --- a/util/perl/OpenSSL/paramnames.pm +++ b/util/perl/OpenSSL/paramnames.pm @@ -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; -- 2.47.2