s4:heimdal: import lorikeet-heimdal-201009250123 (commit 42cabfb5b683dbcb97d583c397b8...
[mat/samba.git] / source4 / heimdal / lib / asn1 / gen_template.c
index 8d4d9b49c2936bfa83cb7e3192d7397ea282d9b6..9e09eb2d8db1f50d221b9036f540ee5590183ac1 100644 (file)
@@ -224,7 +224,8 @@ partial_offset(const char *basetype, const char *name, int need_offset)
     char *str;
     if (name == NULL || need_offset == 0)
        return strdup("0");
-    asprintf(&str, "offsetof(struct %s, %s)", basetype, name);
+    if (asprintf(&str, "offsetof(struct %s, %s)", basetype, name) < 0 || str == NULL)
+       errx(1, "malloc");
     return str;
 }
 
@@ -273,7 +274,8 @@ tlist_header(struct tlist *t, const char *fmt, ...)
 {
     va_list ap;
     va_start(ap, fmt);
-    vasprintf(&t->header, fmt, ap);
+    if (vasprintf(&t->header, fmt, ap) < 0 || t->header == NULL)
+       errx(1, "malloc");
     va_end(ap);
 }
 
@@ -389,7 +391,8 @@ add_line(struct templatehead *t, const char *fmt, ...)
     struct template *q = calloc(1, sizeof(*q));
     va_list ap;
     va_start(ap, fmt);
-    vasprintf(&q->line, fmt, ap);
+    if (vasprintf(&q->line, fmt, ap) < 0 || q->line == NULL)
+       errx(1, "malloc");
     va_end(ap);
     ASN1_TAILQ_INSERT_TAIL(t, q, members);
     return q;
@@ -404,10 +407,11 @@ add_line_pointer(struct templatehead *t,
 {
     struct template *q;
     va_list ap;
-    char *tt;
+    char *tt = NULL;
 
     va_start(ap, ttfmt);
-    vasprintf(&tt, ttfmt, ap);
+    if (vasprintf(&tt, ttfmt, ap) < 0 || tt == NULL)
+       errx(1, "malloc");
     va_end(ap);
 
     q = add_line(t, "{ %s, %s, asn1_%s }", tt, offset, ptr);
@@ -543,7 +547,7 @@ template_members(struct templatehead *temp, const char *basetype, const char *na
        struct template *q;
        Member *m;
        size_t count = 0, i;
-       char *bname;
+       char *bname = NULL;
        FILE *f = get_code_file();
 
        if (ASN1_TAILQ_EMPTY(t->members)) {
@@ -551,7 +555,8 @@ template_members(struct templatehead *temp, const char *basetype, const char *na
            break;
        }
 
-       asprintf(&bname, "bmember_%s_%lu", name ? name : "", (unsigned long)t);
+       if (asprintf(&bname, "bmember_%s_%lu", name ? name : "", (unsigned long)t) < 0 || bname == NULL)
+           errx(1, "malloc");
        output_name(bname);
 
        ASN1_TAILQ_FOREACH(m, t->members, members) {
@@ -583,15 +588,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 +609,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 +618,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 +643,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 +661,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 +682,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 +705,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 +731,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++;