diff --git a/lib/asn1/check-gen.c b/lib/asn1/check-gen.c index 20aacf28e..067485926 100644 --- a/lib/asn1/check-gen.c +++ b/lib/asn1/check-gen.c @@ -124,7 +124,10 @@ test_principal (void) for (i = 0; i < ntests; ++i) { tests[i].val = &values[i]; - asprintf (&tests[i].name, "Principal %d", i); + if (asprintf (&tests[i].name, "Principal %d", i) < 0) + errx(1, "malloc"); + if (tests[i].name == NULL) + errx(1, "malloc"); } ret = generic_test (tests, ntests, sizeof(Principal), @@ -191,7 +194,10 @@ test_authenticator (void) for (i = 0; i < ntests; ++i) { tests[i].val = &values[i]; - asprintf (&tests[i].name, "Authenticator %d", i); + if (asprintf (&tests[i].name, "Authenticator %d", i) < 0) + errx(1, "malloc"); + if (tests[i].name == NULL) + errx(1, "malloc"); } ret = generic_test (tests, ntests, sizeof(Authenticator), diff --git a/lib/asn1/gen.c b/lib/asn1/gen.c index 597191194..610669698 100644 --- a/lib/asn1/gen.c +++ b/lib/asn1/gen.c @@ -116,7 +116,7 @@ get_filename (void) void init_generate (const char *filename, const char *base) { - char *fn; + char *fn = NULL; orig_filename = filename; if (base != NULL) { @@ -145,6 +145,7 @@ init_generate (const char *filename, const char *base) if (privheaderfile == NULL) err (1, "open %s", fn); free(fn); + fn = NULL; /* template file */ if (asprintf(&template, "%s-template.c", headerbase) < 0 || template == NULL) @@ -229,8 +230,7 @@ init_generate (const char *filename, const char *base) headerfile); fprintf (headerfile, "struct units;\n\n"); fprintf (headerfile, "#endif\n\n"); - asprintf(&fn, "%s_files", base); - if (fn == NULL) + if (asprintf(&fn, "%s_files", base) < 0 || fn == NULL) errx(1, "malloc"); logfile = fopen(fn, "w"); if (logfile == NULL) @@ -324,19 +324,19 @@ gen_compare_defval(const char *var, struct value *val) void generate_header_of_codefile(const char *name) { - char *filename; + char *filename = NULL; if (codefile != NULL) abort(); - asprintf (&filename, "%s_%s.x", STEM, name); - if (filename == NULL) + if (asprintf (&filename, "%s_%s.x", STEM, name) < 0 || filename == NULL) errx(1, "malloc"); codefile = fopen (filename, "w"); if (codefile == NULL) err (1, "fopen %s", filename); fprintf(logfile, "%s ", filename); free(filename); + filename = NULL; fprintf (codefile, "/* Generated from %s */\n" "/* Do not edit */\n\n" @@ -664,7 +664,8 @@ getnewbasename(char **newbasename, int typedefp, const char *basename, const cha else { if (name[0] == '*') name++; - asprintf(newbasename, "%s_%s", basename, name); + if (asprintf(newbasename, "%s_%s", basename, name) < 0) + errx(1, "malloc"); } if (*newbasename == NULL) err(1, "malloc"); @@ -730,27 +731,30 @@ define_type (int level, const char *name, const char *basename, Type *t, int typ fprintf (headerfile, "struct %s {\n", newbasename); ASN1_TAILQ_FOREACH(m, t->members, members) { - char *n; + char *n = NULL; /* pad unused */ while (pos < m->val) { - asprintf (&n, "_unused%d:1", pos); + if (asprintf (&n, "_unused%d:1", pos) < 0 || n == NULL) + errx(1, "malloc"); define_type (level + 1, n, newbasename, &i, FALSE, FALSE); free(n); pos++; } - asprintf (&n, "%s:1", m->gen_name); - if (n == NULL) + n = NULL; + if (asprintf (&n, "%s:1", m->gen_name) < 0 || n == NULL) errx(1, "malloc"); define_type (level + 1, n, newbasename, &i, FALSE, FALSE); free (n); + n = NULL; pos++; } /* pad to 32 elements */ while (pos < 32) { - char *n; - asprintf (&n, "_unused%d:1", pos); + char *n = NULL; + if (asprintf (&n, "_unused%d:1", pos) < 0 || n == NULL) + errx(1, "malloc"); define_type (level + 1, n, newbasename, &i, FALSE, FALSE); free(n); pos++; @@ -794,10 +798,9 @@ define_type (int level, const char *name, const char *basename, Type *t, int typ if (m->ellipsis) { ; } else if (m->optional) { - char *n; + char *n = NULL; - asprintf (&n, "*%s", m->gen_name); - if (n == NULL) + if (asprintf (&n, "*%s", m->gen_name) < 0 || n == NULL) errx(1, "malloc"); define_type (level + 1, n, newbasename, m->type, FALSE, FALSE); free (n); @@ -882,10 +885,9 @@ define_type (int level, const char *name, const char *basename, Type *t, int typ space(level + 2); fprintf(headerfile, "heim_octet_string asn1_ellipsis;\n"); } else if (m->optional) { - char *n; + char *n = NULL; - asprintf (&n, "*%s", m->gen_name); - if (n == NULL) + if (asprintf (&n, "*%s", m->gen_name) < 0 || n == NULL) errx(1, "malloc"); define_type (level + 2, n, newbasename, m->type, FALSE, FALSE); free (n); diff --git a/lib/asn1/gen_decode.c b/lib/asn1/gen_decode.c index 043cfac2d..de680173a 100644 --- a/lib/asn1/gen_decode.c +++ b/lib/asn1/gen_decode.c @@ -320,14 +320,13 @@ decode_type (const char *name, const Type *t, int optional, break; ASN1_TAILQ_FOREACH(m, t->members, members) { - char *s; + char *s = NULL; if (m->ellipsis) continue; - asprintf (&s, "%s(%s)->%s", m->optional ? "" : "&", - name, m->gen_name); - if (s == NULL) + if (asprintf (&s, "%s(%s)->%s", m->optional ? "" : "&", + name, m->gen_name) < 0 || s == NULL) errx(1, "malloc"); decode_type (s, m->type, m->optional, forwstr, m->gen_name, NULL); free (s); @@ -363,8 +362,7 @@ decode_type (const char *name, const Type *t, int optional, is_primitive_type(m->type->subtype->type) ? "PRIM" : "CONS", valuename(m->type->tag.tagclass, m->type->tag.tagvalue)); - asprintf (&s, "%s(%s)->%s", m->optional ? "" : "&", name, m->gen_name); - if (s == NULL) + if (asprintf (&s, "%s(%s)->%s", m->optional ? "" : "&", name, m->gen_name) < 0 || s == NULL) errx(1, "malloc"); if(m->optional) fprintf(codefile, @@ -388,8 +386,7 @@ decode_type (const char *name, const Type *t, int optional, ASN1_TAILQ_FOREACH(m, t->members, members) { char *s; - asprintf (&s, "%s->%s", name, m->gen_name); - if (s == NULL) + if (asprintf (&s, "%s->%s", name, m->gen_name) < 0 || s == NULL) errx(1, "malloc"); fprintf(codefile, "if((members & (1 << %d)) == 0)\n", memno); if(m->optional) @@ -406,8 +403,8 @@ decode_type (const char *name, const Type *t, int optional, } case TSetOf: case TSequenceOf: { - char *n; - char *sname; + char *n = NULL; + char *sname = NULL; fprintf (codefile, "{\n" @@ -441,11 +438,9 @@ decode_type (const char *name, const Type *t, int optional, tmpstr, forwstr, name, tmpstr); - asprintf (&n, "&(%s)->val[(%s)->len]", name, name); - if (n == NULL) + if (asprintf (&n, "&(%s)->val[(%s)->len]", name, name) < 0 || n == NULL) errx(1, "malloc"); - asprintf (&sname, "%s_s_of", tmpstr); - if (sname == NULL) + if (asprintf (&sname, "%s_s_of", tmpstr) < 0 || sname == NULL) errx(1, "malloc"); decode_type (n, t->subtype, 0, forwstr, sname, NULL); fprintf (codefile, @@ -472,10 +467,11 @@ decode_type (const char *name, const Type *t, int optional, decode_primitive ("general_string", name, forwstr); break; case TTag:{ - char *tname, *typestring; + char *tname = NULL, *typestring = NULL; char *ide = NULL; - asprintf(&typestring, "%s_type", tmpstr); + if (asprintf(&typestring, "%s_type", tmpstr) < 0 || typestring == NULL) + errx(1, "malloc"); fprintf(codefile, "{\n" @@ -528,8 +524,7 @@ decode_type (const char *name, const Type *t, int optional, fprintf(codefile, "if (%s_datalen > len) { e = ASN1_OVERRUN; %s; }\n" "len = %s_datalen;\n", tmpstr, forwstr, tmpstr); - asprintf (&tname, "%s_Tag", tmpstr); - if (tname == NULL) + if (asprintf (&tname, "%s_Tag", tmpstr) < 0 || tname == NULL) errx(1, "malloc"); decode_type (name, t->subtype, 0, forwstr, tname, ide); if(support_ber) @@ -568,7 +563,7 @@ decode_type (const char *name, const Type *t, int optional, ASN1_TAILQ_FOREACH(m, t->members, members) { const Type *tt = m->type; - char *s; + char *s = NULL; Der_class cl; Der_type ty; unsigned tag; @@ -586,9 +581,8 @@ decode_type (const char *name, const Type *t, int optional, classname(cl), ty ? "CONS" : "PRIM", valuename(cl, tag)); - asprintf (&s, "%s(%s)->u.%s", m->optional ? "" : "&", - name, m->gen_name); - if (s == NULL) + if (asprintf (&s, "%s(%s)->u.%s", m->optional ? "" : "&", + name, m->gen_name) < 0 || s == NULL) errx(1, "malloc"); decode_type (s, m->type, m->optional, forwstr, m->gen_name, NULL); fprintf(codefile, diff --git a/lib/asn1/gen_encode.c b/lib/asn1/gen_encode.c index e9b4e7cd1..f622a95ef 100644 --- a/lib/asn1/gen_encode.c +++ b/lib/asn1/gen_encode.c @@ -259,13 +259,12 @@ encode_type (const char *name, const Type *t, const char *tmpstr) break; ASN1_TAILQ_FOREACH_REVERSE(m, t->members, memhead, members) { - char *s; + char *s = NULL; if (m->ellipsis) continue; - asprintf (&s, "%s(%s)->%s", m->optional ? "" : "&", name, m->gen_name); - if (s == NULL) + if (asprintf (&s, "%s(%s)->%s", m->optional ? "" : "&", name, m->gen_name) < 0 || s == NULL) errx(1, "malloc"); fprintf(codefile, "/* %s */\n", m->name); if (m->optional) @@ -352,19 +351,17 @@ encode_type (const char *name, const Type *t, const char *tmpstr) break; } case TSequenceOf: { - char *n; - char *sname; + char *sname = NULL; + char *n = NULL; fprintf (codefile, "for(i = (%s)->len - 1; i >= 0; --i) {\n" "size_t %s_for_oldret = ret;\n" "ret = 0;\n", name, tmpstr); - asprintf (&n, "&(%s)->val[i]", name); - if (n == NULL) + if (asprintf (&n, "&(%s)->val[i]", name) < 0 || n == NULL) errx(1, "malloc"); - asprintf (&sname, "%s_S_Of", tmpstr); - if (sname == NULL) + if (asprintf (&sname, "%s_S_Of", tmpstr) < 0 || sname == NULL) errx(1, "malloc"); encode_type (n, t->subtype, sname); fprintf (codefile, @@ -388,10 +385,9 @@ encode_type (const char *name, const Type *t, const char *tmpstr) constructed = 0; break; case TTag: { - char *tname; + char *tname = NULL; int c; - asprintf (&tname, "%s_tag", tmpstr); - if (tname == NULL) + if (asprintf (&tname, "%s_tag", tmpstr) < 0 || tname == NULL) errx(1, "malloc"); c = encode_type (name, t->subtype, tname); fprintf (codefile, @@ -405,20 +401,19 @@ encode_type (const char *name, const Type *t, const char *tmpstr) } case TChoice:{ Member *m, *have_ellipsis = NULL; - char *s; + char *s = NULL; if (t->members == NULL) break; fprintf(codefile, "\n"); - asprintf (&s, "(%s)", name); - if (s == NULL) + if (asprintf (&s, "(%s)", name) < 0 || s == NULL) errx(1, "malloc"); fprintf(codefile, "switch(%s->element) {\n", s); ASN1_TAILQ_FOREACH_REVERSE(m, t->members, memhead, members) { - char *s2; + char *s2 = NULL; if (m->ellipsis) { have_ellipsis = m; @@ -426,9 +421,8 @@ encode_type (const char *name, const Type *t, const char *tmpstr) } fprintf (codefile, "case %s: {", m->label); - asprintf(&s2, "%s(%s)->u.%s", m->optional ? "" : "&", - s, m->gen_name); - if (s2 == NULL) + if (asprintf(&s2, "%s(%s)->u.%s", m->optional ? "" : "&", + s, m->gen_name) < 0 || s2 == NULL) errx(1, "malloc"); if (m->optional) fprintf (codefile, "if(%s) {\n", s2); diff --git a/lib/asn1/gen_free.c b/lib/asn1/gen_free.c index dc612074a..948273b22 100644 --- a/lib/asn1/gen_free.c +++ b/lib/asn1/gen_free.c @@ -93,10 +93,9 @@ free_type (const char *name, const Type *t, int preserve) if(t->type == TChoice) fprintf(codefile, "case %s:\n", m->label); - asprintf (&s, "%s(%s)->%s%s", - m->optional ? "" : "&", name, - t->type == TChoice ? "u." : "", m->gen_name); - if (s == NULL) + if (asprintf (&s, "%s(%s)->%s%s", + m->optional ? "" : "&", name, + t->type == TChoice ? "u." : "", m->gen_name) < 0 || s == NULL) errx(1, "malloc"); if(m->optional) fprintf(codefile, "if(%s) {\n", s); @@ -128,8 +127,7 @@ free_type (const char *name, const Type *t, int preserve) char *n; fprintf (codefile, "while((%s)->len){\n", name); - asprintf (&n, "&(%s)->val[(%s)->len-1]", name, name); - if (n == NULL) + if (asprintf (&n, "&(%s)->val[(%s)->len-1]", name, name) < 0 || n == NULL) errx(1, "malloc"); free_type(n, t->subtype, FALSE); fprintf(codefile, diff --git a/lib/asn1/gen_template.c b/lib/asn1/gen_template.c index 8d4d9b49c..e408faff5 100644 --- a/lib/asn1/gen_template.c +++ b/lib/asn1/gen_template.c @@ -583,15 +583,18 @@ template_members(struct templatehead *temp, const char *basetype, const char *na Member *m; ASN1_TAILQ_FOREACH(m, t->members, members) { - char *newbasename; + char *newbasename = NULL; if (m->ellipsis) continue; - if (name) - asprintf(&newbasename, "%s_%s", basetype, name); - else + if (name) { + if (asprintf(&newbasename, "%s_%s", basetype, name) < 0) + errx(1, "malloc"); + } else newbasename = strdup(basetype); + if (newbasename == NULL) + errx(1, "malloc"); template_members(temp, newbasename, m->gen_name, m->type, m->optional, isstruct, 1); @@ -601,7 +604,7 @@ template_members(struct templatehead *temp, const char *basetype, const char *na break; } case TTag: { - char *tname, *elname; + char *tname = NULL, *elname = NULL; const char *sename, *dupname; int subtype_is_struct = is_struct(t->subtype, isstruct); @@ -610,10 +613,12 @@ template_members(struct templatehead *temp, const char *basetype, const char *na else sename = symbol_name(basetype, t->subtype); - asprintf(&tname, "tag_%s_%lu", name ? name : "", (unsigned long)t); + if (asprintf(&tname, "tag_%s_%lu", name ? name : "", (unsigned long)t) < 0 || tname == NULL) + errx(1, "malloc"); output_name(tname); - asprintf(&elname, "%s_%s", basetype, tname); + if (asprintf(&elname, "%s_%s", basetype, tname) < 0 || elname == NULL) + errx(1, "malloc"); generate_template_type(elname, &dupname, NULL, sename, name, t->subtype, 0, subtype_is_struct, 0); @@ -633,16 +638,17 @@ template_members(struct templatehead *temp, const char *basetype, const char *na case TSetOf: case TSequenceOf: { const char *type, *tname, *dupname; - char *sename, *elname; + char *sename = NULL, *elname = NULL; int subtype_is_struct = is_struct(t->subtype, 0); if (name && subtype_is_struct) { tname = "seofTstruct"; - asprintf(&sename, "%s_%s_val", - basetype, name); + if (asprintf(&sename, "%s_%s_val", basetype, name) < 0) + errx(1, "malloc"); } else if (subtype_is_struct) { tname = "seofTstruct"; - asprintf(&sename, "%s_val", symbol_name(basetype, t->subtype)); + if (asprintf(&sename, "%s_val", symbol_name(basetype, t->subtype)) < 0) + errx(1, "malloc"); } else { if (name) tname = name; @@ -650,12 +656,15 @@ template_members(struct templatehead *temp, const char *basetype, const char *na tname = "seofTstruct"; sename = strdup(symbol_name(basetype, t->subtype)); } + if (sename == NULL) + errx(1, "malloc"); if (t->type == TSetOf) type = "A1_OP_SETOF"; else if (t->type == TSequenceOf) type = "A1_OP_SEQOF"; else abort(); - asprintf(&elname, "%s_%s_%lu", basetype, tname, (unsigned long)t); + if (asprintf(&elname, "%s_%s_%lu", basetype, tname, (unsigned long)t) < 0 || elname == NULL) + errx(1, "malloc"); generate_template_type(elname, &dupname, NULL, sename, NULL, t->subtype, 0, subtype_is_struct, need_offset); @@ -668,21 +677,22 @@ template_members(struct templatehead *temp, const char *basetype, const char *na struct templatehead template = ASN1_TAILQ_HEAD_INITIALIZER(template); struct template *q; size_t count = 0, i; - char *tname; + char *tname = NULL; FILE *f = get_code_file(); Member *m; int ellipsis = 0; char *e; - asprintf(&tname, "asn1_choice_%s_%s%x", - basetype, name ? name : "", (unsigned int)(uintptr_t)t); + if (asprintf(&tname, "asn1_choice_%s_%s%x", + basetype, name ? name : "", (unsigned int)(uintptr_t)t) < 0 || tname == NULL) + errx(1, "malloc"); ASN1_TAILQ_FOREACH(m, t->members, members) { const char *dupname; - char *elname; - char *newbasename; + char *elname = NULL; + char *newbasename = NULL; int subtype_is_struct; - + if (m->ellipsis) { ellipsis = 1; continue; @@ -690,13 +700,19 @@ template_members(struct templatehead *temp, const char *basetype, const char *na subtype_is_struct = is_struct(m->type, 0); - asprintf(&elname, "%s_choice_%s", basetype, m->gen_name); + if (asprintf(&elname, "%s_choice_%s", basetype, m->gen_name) < 0 || elname == NULL) + errx(1, "malloc"); - if (subtype_is_struct) - asprintf(&newbasename, "%s_%s", basetype, m->gen_name); - else + if (subtype_is_struct) { + if (asprintf(&newbasename, "%s_%s", basetype, m->gen_name) < 0) + errx(1, "malloc"); + } else newbasename = strdup(basetype); + if (newbasename == NULL) + errx(1, "malloc"); + + generate_template_type(elname, &dupname, NULL, symbol_name(newbasename, m->type), NULL, m->type, 0, subtype_is_struct, 1); @@ -710,10 +726,11 @@ template_members(struct templatehead *temp, const char *basetype, const char *na free(newbasename); } + e = NULL; if (ellipsis) { - asprintf(&e, "offsetof(%s%s, u.asn1_ellipsis)", isstruct ? "struct " : "", basetype); - } else - e = NULL; + if (asprintf(&e, "offsetof(%s%s, u.asn1_ellipsis)", isstruct ? "struct " : "", basetype) < 0 || e == NULL) + errx(1, "malloc"); + } ASN1_TAILQ_FOREACH(q, &template, members) { count++;