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);