aboutsummaryrefslogtreecommitdiffstats
path: root/asn1
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2023-04-27 05:43:51 +0200
committerneels <nhofmeyr@sysmocom.de>2023-04-27 16:41:49 +0000
commita33955ce8fd9c3e1b03f2bfc960499919ee1449f (patch)
treecd4fa3f87c786ddfe88cbc333390ab2b954888fc /asn1
parent29d7e780fc96efcb8d4ca01acc0847f94fbeeabf (diff)
asn1tostruct.py: fix leak in error paths of iesDefs
Diffstat (limited to 'asn1')
-rwxr-xr-xasn1/utils/asn1tostruct.py10
1 files changed, 7 insertions, 3 deletions
diff --git a/asn1/utils/asn1tostruct.py b/asn1/utils/asn1tostruct.py
index 9b1c1a1..f39f45b 100755
--- a/asn1/utils/asn1tostruct.py
+++ b/asn1/utils/asn1tostruct.py
@@ -328,6 +328,7 @@ for key in iesDefs:
f.write(" int i, decoded = 0;\n")
if len(iesDefs[key]["ies"]) != 0:
f.write(" int tempDecoded = 0;\n")
+ f.write(" int rc = -1;\n")
f.write(" assert(any_p != NULL);\n")
if len(iesDefs[key]["ies"]) != 0:
@@ -364,7 +365,7 @@ for key in iesDefs:
f.write(" tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_%s, (void**)&%s_p);\n" % (ietypeunderscore, lowerFirstCamelWord(ietypesubst)))
f.write(" if (tempDecoded < 0) {\n")
f.write(" %s_DEBUG(\"Decoding of IE %s failed\\n\");\n" % (fileprefix.upper(), ienameunderscore))
- f.write(" return -1;\n")
+ f.write(" goto free_and_return_rc;\n")
f.write(" }\n")
f.write(" decoded += tempDecoded;\n")
f.write(" if (asn1_xer_print)\n")
@@ -379,11 +380,14 @@ for key in iesDefs:
f.write(" } break;\n")
f.write(" default:\n")
f.write(" %s_DEBUG(\"Unknown protocol IE id (%%d) for message %s\\n\", (int)ie_p->id);\n" % (fileprefix.upper(), re.sub('-', '_', structName.lower())))
- f.write(" return -1;\n")
+ f.write(" goto free_and_return_rc;\n")
f.write(" }\n")
f.write(" }\n")
+ f.write(" rc = decoded;\n")
+ f.write("\n")
+ f.write("free_and_return_rc:\n")
f.write(" ASN_STRUCT_FREE(asn_DEF_%s, %s_p);\n" % (asn1cStruct, asn1cStructfirstlower))
- f.write(" return decoded;\n")
+ f.write(" return rc;\n")
f.write("}\n\n")
for key in iesDefs: