X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/522c66eae1a144e0631dfaa61f1632e341ea7ce6..9f8418e870a70c264eda1598f2d470e5428c216d:/uip/mhparse.c diff --git a/uip/mhparse.c b/uip/mhparse.c index 984b1430..7b1352aa 100644 --- a/uip/mhparse.c +++ b/uip/mhparse.c @@ -151,7 +151,6 @@ static int openURL (CT, char **); static int parse_header_attrs (const char *, const char *, char **, PM *, PM *, char **); static size_t param_len(PM, int, size_t, int *, int *, size_t *); -static size_t encode_param(PM, char *, size_t, size_t, size_t, int); static size_t normal_param(PM, char *, size_t, size_t, size_t); static int get_dispo (char *, CT, int); @@ -295,9 +294,7 @@ get_content (FILE *in, char *file, int toplevel) m_getfld_state_t gstate = 0; /* allocate the content structure */ - if (!(ct = (CT) mh_xcalloc (1, sizeof(*ct)))) - adios (NULL, "out of memory"); - + NEW0(ct); ct->c_fp = in; ct->c_file = add (file, NULL); ct->c_begin = ftell (ct->c_fp) + 1; @@ -584,7 +581,7 @@ add_header (CT ct, char *name, char *value) HF hp; /* allocate header field structure */ - hp = mh_xmalloc (sizeof(*hp)); + NEW(hp); /* link data into header structure */ hp->name = name; @@ -1030,8 +1027,7 @@ InitText (CT ct) ct->c_subtype = ct_str_subtype (CT_TEXT, ci->ci_subtype); /* allocate text character set structure */ - if ((t = (struct text *) mh_xcalloc (1, sizeof(*t))) == NULL) - adios (NULL, "out of memory"); + NEW0(t); ct->c_ctparams = (void *) t; /* scan for charset parameter */ @@ -1135,8 +1131,7 @@ InitMultiPart (CT ct) } /* allocate primary structure for multipart info */ - if ((m = (struct multipart *) mh_xcalloc (1, sizeof(*m))) == NULL) - adios (NULL, "out of memory"); + NEW0(m); ct->c_ctparams = (void *) m; /* check if boundary parameter contains only whitespace characters */ @@ -1180,8 +1175,7 @@ InitMultiPart (CT ct) if (strcmp (bufp + 2, m->mp_start)) continue; next_part: - if ((part = (struct part *) mh_xcalloc (1, sizeof(*part))) == NULL) - adios (NULL, "out of memory"); + NEW0(part); *next = part; next = &part->mp_next; @@ -1420,8 +1414,7 @@ InitMessage (CT ct) PM pm; struct partial *p; - if ((p = (struct partial *) mh_xcalloc (1, sizeof(*p))) == NULL) - adios (NULL, "out of memory"); + NEW0(p); ct->c_ctparams = (void *) p; /* scan for parameters "id", "number", and "total" */ @@ -1469,8 +1462,7 @@ invalid_param: CT p; FILE *fp; - if ((e = (struct exbody *) mh_xcalloc (1, sizeof(*e))) == NULL) - adios (NULL, "out of memory"); + NEW0(e); ct->c_ctparams = (void *) e; if (!ct->c_fp @@ -1751,7 +1743,7 @@ openBase64 (CT ct, char **file) /* sbeck -- handle suffixes */ CI ci; CE ce = &ct->c_cefile; - const char *decoded; + unsigned char *decoded; size_t decoded_len; unsigned char digest[16]; @@ -1840,10 +1832,11 @@ openBase64 (CT ct, char **file) if (decodeBase64 (buffer, &decoded, &decoded_len, ct->c_type == CT_TEXT, ct->c_digested ? digest : NULL) == OK) { size_t i; - const char *decoded_p = decoded; + unsigned char *decoded_p = decoded; for (i = 0; i < decoded_len; ++i) { putc (*decoded_p++, ce->ce_fp); } + free ((char *) decoded); if (ferror (ce->ce_fp)) { content_error (ce->ce_file, ct, "error writing to"); goto clean_up; @@ -2906,13 +2899,13 @@ openURL (CT ct, char **file) static int readDigest (CT ct, char *cp) { - const char *digest; + unsigned char *digest; size_t len; if (decodeBase64 (cp, &digest, &len, 0, NULL) == OK) { const size_t maxlen = sizeof ct->c_digest / sizeof ct->c_digest[0]; - if (strlen (digest) <= maxlen) { + if (strlen ((char *) digest) <= maxlen) { memcpy (ct->c_digest, digest, maxlen); if (debugsw) { @@ -2929,7 +2922,7 @@ readDigest (CT ct, char *cp) } else { if (debugsw) { fprintf (stderr, "invalid MD5 digest (got %d octets)\n", - (int) strlen (digest)); + (int) strlen ((char *) digest)); } return NOTOK; @@ -3544,8 +3537,7 @@ bad_quote: } if (pp == NULL) { - pp = mh_xmalloc(sizeof(*pp)); - memset(pp, 0, sizeof(*pp)); + NEW0(pp); pp->name = nameptr; pp->next = phead; phead = pp; @@ -3555,8 +3547,7 @@ bad_quote: * Insert this into the section linked list */ - sp = mh_xmalloc(sizeof(*sp)); - memset(sp, 0, sizeof(*sp)); + NEW0(sp); sp->value = valptr; sp->index = index; sp->len = len; @@ -3672,7 +3663,7 @@ content_charset (CT ct) { ret_charset = get_param(ct->c_ctinfo.ci_first_pm, "charset", '?', 0); - return ret_charset ? ret_charset : getcpy ("US-ASCII"); + return ret_charset ? ret_charset : mh_xstrdup("US-ASCII"); } @@ -3980,7 +3971,7 @@ param_len(PM pm, int index, size_t valueoff, int *encode, int *cont, * Output an encoded parameter string. */ -static size_t +size_t encode_param(PM pm, char *output, size_t len, size_t valuelen, size_t valueoff, int index) { @@ -4089,10 +4080,9 @@ normal_param(PM pm, char *output, size_t len, size_t valuelen, PM add_param(PM *first, PM *last, char *name, char *value, int nocopy) { - PM pm = mh_xmalloc(sizeof(*pm)); - - memset(pm, 0, sizeof(*pm)); + PM pm; + NEW0(pm); pm->pm_name = nocopy ? name : getcpy(name); pm->pm_value = nocopy ? value : getcpy(value);