asn1: Fix ENOMEM NULL deref

This commit is contained in:
Nicolas Williams
2022-01-12 17:01:56 -06:00
parent f0c46e7830
commit d88298649b

View File

@@ -127,14 +127,14 @@ free_type (const char *name, const Type *t, int preserve)
case TSequenceOf: { case TSequenceOf: {
char *n; char *n;
fprintf (codefile, "while((%s)->len){\n", name); fprintf (codefile, "if ((%s)->val)\nwhile((%s)->len){\n", name, name);
if (asprintf (&n, "&(%s)->val[(%s)->len-1]", name, name) < 0 || n == NULL) if (asprintf (&n, "&(%s)->val[(%s)->len-1]", name, name) < 0 || n == NULL)
errx(1, "malloc"); errx(1, "malloc");
free_type(n, t->subtype, FALSE); free_type(n, t->subtype, FALSE);
fprintf(codefile, fprintf(codefile,
"(%s)->len--;\n" "(%s)->len--;\n"
"}\n", "} else (%s)->len = 0;\n",
name); name, name);
fprintf(codefile, fprintf(codefile,
"free((%s)->val);\n" "free((%s)->val);\n"
"(%s)->val = NULL;\n", name, name); "(%s)->val = NULL;\n", name, name);