version 1.1.1.1.2.1, 2012/03/09 09:38:55
|
version 1.2, 2012/03/10 00:26:49
|
Line 169 hdrValue(const char *str, size_t len, const char **end
|
Line 169 hdrValue(const char *str, size_t len, const char **end
|
|
|
e = str + len; |
e = str + len; |
while (str < e) { |
while (str < e) { |
if ((crlf = findtextpos(str, e - str, CRLF, strlen(CRLF)))) { | if (!(crlf = findtextpos(str, e - str, CRLF, strlen(CRLF)))) { |
www_SetErr(EBADMSG, "Bad MIME format message"); | www_SetErr(EBADMSG, "Bad header format of MIME part"); |
return NULL; |
return NULL; |
} |
} |
|
|
Line 328 mime_parseMultiPart(const char *str, size_t len, const
|
Line 328 mime_parseMultiPart(const char *str, size_t len, const
|
mime_t *mime = NULL; |
mime_t *mime = NULL; |
struct iovec bd[2]; |
struct iovec bd[2]; |
struct tagMIME *m, *old = NULL; |
struct tagMIME *m, *old = NULL; |
const char *next; | const char *next = NULL; |
|
|
if (!str | !bdtag) { |
if (!str | !bdtag) { |
www_SetErr(EINVAL, "String or boundary tag is NULL"); |
www_SetErr(EINVAL, "String or boundary tag is NULL"); |
Line 359 mime_parseMultiPart(const char *str, size_t len, const
|
Line 359 mime_parseMultiPart(const char *str, size_t len, const
|
return NULL; |
return NULL; |
} else |
} else |
bd[1].iov_len = strlen(bd[1].iov_base); |
bd[1].iov_len = strlen(bd[1].iov_base); |
|
|
|
/* check boundary tag */ |
if (memcmp(str, strstr(bd[0].iov_base, "--"), strlen(strstr(bd[0].iov_base, "--")))) { |
if (memcmp(str, strstr(bd[0].iov_base, "--"), strlen(strstr(bd[0].iov_base, "--")))) { |
www_SetErr(EBADMSG, "Bad content data, not found boundary tag"); |
www_SetErr(EBADMSG, "Bad content data, not found boundary tag"); |
free(bd[1].iov_base); |
free(bd[1].iov_base); |
Line 370 mime_parseMultiPart(const char *str, size_t len, const
|
Line 372 mime_parseMultiPart(const char *str, size_t len, const
|
len -= strlen(strstr(bd[0].iov_base, "--")); |
len -= strlen(strstr(bd[0].iov_base, "--")); |
} |
} |
|
|
while (42) { | while (len > 0) { |
m = malloc(sizeof(struct tagMIME)); |
m = malloc(sizeof(struct tagMIME)); |
if (!m) { |
if (!m) { |
LOGERR; |
LOGERR; |
Line 418 mime_parseMultiPart(const char *str, size_t len, const
|
Line 420 mime_parseMultiPart(const char *str, size_t len, const
|
len -= bd[0].iov_len; |
len -= bd[0].iov_len; |
*/ |
*/ |
|
|
|
free(bd[1].iov_base); |
|
free(bd[0].iov_base); |
|
|
if (end) |
if (end) |
*end = str; |
*end = str; |
return mime; |
return mime; |
Line 515 mime_parseHeader(struct tagMIME * __restrict m, const
|
Line 520 mime_parseHeader(struct tagMIME * __restrict m, const
|
} |
} |
/* get value */ |
/* get value */ |
c->cgi_value = hdrValue(colon + 1, e - colon - 1, &str); |
c->cgi_value = hdrValue(colon + 1, e - colon - 1, &str); |
|
if (!c->cgi_value) { |
|
free(c->cgi_name); |
|
free(c); |
|
freeHeader(m); |
|
return -1; |
|
} |
|
|
if (!old) |
if (!old) |
SLIST_INSERT_HEAD(&m->mime_header, c, cgi_node); |
SLIST_INSERT_HEAD(&m->mime_header, c, cgi_node); |
Line 542 mime_getValue(struct tagMIME * __restrict m, const cha
|
Line 553 mime_getValue(struct tagMIME * __restrict m, const cha
|
const char *v = NULL; |
const char *v = NULL; |
|
|
SLIST_FOREACH(c, &m->mime_header, cgi_node) |
SLIST_FOREACH(c, &m->mime_header, cgi_node) |
if (!strcmp(c->cgi_name, name)) { | if (!strcasecmp(c->cgi_name, name)) { |
v = c->cgi_value; |
v = c->cgi_value; |
break; |
break; |
} |
} |
Line 564 mime_readPart(struct tagMIME * __restrict m, const cha
|
Line 575 mime_readPart(struct tagMIME * __restrict m, const cha
|
cgi_t *attr; |
cgi_t *attr; |
struct iovec bd; |
struct iovec bd; |
|
|
if (!m || !str) { | if (!m || !str || (ssize_t) len < 0) { |
www_SetErr(EINVAL, "Mime part or string is NULL"); | www_SetErr(EINVAL, "Mime part, string is NULL or length is less 0"); |
return -1; |
return -1; |
} |
} |
|
|
Line 576 mime_readPart(struct tagMIME * __restrict m, const cha
|
Line 587 mime_readPart(struct tagMIME * __restrict m, const cha
|
if (!ct || www_cmptype(ct, "multipart")) { |
if (!ct || www_cmptype(ct, "multipart")) { |
/* not multi part, assign like body element */ |
/* not multi part, assign like body element */ |
m->mime_body.iov_base = malloc(len - (eoh - str) + 1); |
m->mime_body.iov_base = malloc(len - (eoh - str) + 1); |
|
if (!m->mime_body.iov_base) { |
|
LOGERR; |
|
freeHeader(m); |
|
return -1; |
|
} |
memcpy(m->mime_body.iov_base, eoh, len - (eoh - str)); |
memcpy(m->mime_body.iov_base, eoh, len - (eoh - str)); |
((char*) m->mime_body.iov_base)[len - (eoh - str)] = 0; |
((char*) m->mime_body.iov_base)[len - (eoh - str)] = 0; |
m->mime_body.iov_len = len - (eoh - str) + 1; |
m->mime_body.iov_len = len - (eoh - str) + 1; |
} else { |
} else { |
/* multi part */ |
/* multi part */ |
attr = www_parseAttributes(&ct); |
attr = www_parseAttributes(&ct); |
if (!attr) | if (!attr) { |
| freeHeader(m); |
return -1; |
return -1; |
|
} |
bd.iov_base = bd_begin(www_getAttribute(attr, "boundary")); |
bd.iov_base = bd_begin(www_getAttribute(attr, "boundary")); |
bd.iov_len = strlen(bd.iov_base); |
bd.iov_len = strlen(bd.iov_base); |
eb = findtextpos(eoh, len - (eoh - str), bd.iov_base, bd.iov_len); |
eb = findtextpos(eoh, len - (eoh - str), bd.iov_base, bd.iov_len); |
Line 595 mime_readPart(struct tagMIME * __restrict m, const cha
|
Line 613 mime_readPart(struct tagMIME * __restrict m, const cha
|
if (!m->mime_prolog.iov_base) { |
if (!m->mime_prolog.iov_base) { |
LOGERR; |
LOGERR; |
www_freeAttributes(&attr); |
www_freeAttributes(&attr); |
|
freeHeader(m); |
return -1; |
return -1; |
} |
} |
memcpy(m->mime_prolog.iov_base, eoh, eb - eoh); |
memcpy(m->mime_prolog.iov_base, eoh, eb - eoh); |
Line 611 mime_readPart(struct tagMIME * __restrict m, const cha
|
Line 630 mime_readPart(struct tagMIME * __restrict m, const cha
|
if (!m->mime_epilog.iov_base) { |
if (!m->mime_epilog.iov_base) { |
LOGERR; |
LOGERR; |
www_freeAttributes(&attr); |
www_freeAttributes(&attr); |
|
freeHeader(m); |
return -1; |
return -1; |
} |
} |
memcpy(m->mime_epilog.iov_base, str, len - (eoh - str)); |
memcpy(m->mime_epilog.iov_base, str, len - (eoh - str)); |
Line 618 mime_readPart(struct tagMIME * __restrict m, const cha
|
Line 638 mime_readPart(struct tagMIME * __restrict m, const cha
|
m->mime_epilog.iov_len = len - (eoh - str) + 1; |
m->mime_epilog.iov_len = len - (eoh - str) + 1; |
|
|
} |
} |
|
|
|
www_freeAttributes(&attr); |
} |
} |
|
|
www_freeAttributes(&attr); |
|
return 0; |
return 0; |
} |
} |
|
|