Merge branch 'tmp-fix-16159' into 'master'
parser: fix parser2tree memory leak (and parsing error)
See merge request gnutls/libtasn1!67
diff --git a/fuzz/libtasn1_parser2tree_fuzzer.repro/clusterfuzz-testcase-minimized-libtasn1_parser2tree_fuzzer-5671277624295424 b/fuzz/libtasn1_parser2tree_fuzzer.repro/clusterfuzz-testcase-minimized-libtasn1_parser2tree_fuzzer-5671277624295424
new file mode 100644
index 0000000..db2fb99
--- /dev/null
+++ b/fuzz/libtasn1_parser2tree_fuzzer.repro/clusterfuzz-testcase-minimized-libtasn1_parser2tree_fuzzer-5671277624295424
@@ -0,0 +1 @@
+ÿ DEFINITIONS IMPLICIT TAGS ::= BEGIN IA5String ::=[UNIVERSAL 9]IMPLICIT OCTET STRING ÿ ::= ÿ END
\ No newline at end of file
diff --git a/lib/ASN1.y b/lib/ASN1.y
index c05a28d..c63b40f 100644
--- a/lib/ASN1.y
+++ b/lib/ASN1.y
@@ -442,8 +442,15 @@
;
type_constant_list : type_constant {$$=$1;}
- | type_constant_list type_constant {$$=$1;
- if ($1 && $2) _asn1_set_right(_asn1_get_last_right($1),$2);}
+ | type_constant_list type_constant {if (!$1)
+ {
+ $$ = $2;
+ }
+ else
+ {
+ $$=$1;
+ if ($2) _asn1_set_right(_asn1_get_last_right($1),$2);
+ }}
;
definitions_id : IDENTIFIER '{' obj_constant_list '}' {$$=_asn1_add_static_node(&e_list, ASN1_ETYPE_OBJECT_ID);