diff --git a/lib/asn1/gen_free.c b/lib/asn1/gen_free.c index 115eb2ed6..aa323c0ad 100644 --- a/lib/asn1/gen_free.c +++ b/lib/asn1/gen_free.c @@ -127,14 +127,14 @@ free_type (const char *name, const Type *t, int preserve) case TSequenceOf: { 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) errx(1, "malloc"); free_type(n, t->subtype, FALSE); fprintf(codefile, "(%s)->len--;\n" - "}\n", - name); + "} else (%s)->len = 0;\n", + name, name); fprintf(codefile, "free((%s)->val);\n" "(%s)->val = NULL;\n", name, name);