--- libaitwww/src/mime.c 2012/03/08 23:40:21 1.1.1.1 +++ libaitwww/src/mime.c 2012/03/09 15:34:37 1.1.1.1.2.2 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: mime.c,v 1.1.1.1 2012/03/08 23:40:21 misho Exp $ +* $Id: mime.c,v 1.1.1.1.2.2 2012/03/09 15:34:37 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -359,6 +359,8 @@ mime_parseMultiPart(const char *str, size_t len, const return NULL; } else 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, "--")))) { www_SetErr(EBADMSG, "Bad content data, not found boundary tag"); free(bd[1].iov_base); @@ -413,7 +415,10 @@ mime_parseMultiPart(const char *str, size_t len, const } str += bd[0].iov_len; + /* LLVM static code analyzer said for this - unusable + * len -= bd[0].iov_len; + */ if (end) *end = str; @@ -512,6 +517,12 @@ mime_parseHeader(struct tagMIME * __restrict m, const } /* get value */ 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) SLIST_INSERT_HEAD(&m->mime_header, c, cgi_node); @@ -539,7 +550,7 @@ mime_getValue(struct tagMIME * __restrict m, const cha const char *v = NULL; SLIST_FOREACH(c, &m->mime_header, cgi_node) - if (!strcmp(c->cgi_name, name)) { + if (!strcasecmp(c->cgi_name, name)) { v = c->cgi_value; break; } @@ -561,8 +572,8 @@ mime_readPart(struct tagMIME * __restrict m, const cha cgi_t *attr; struct iovec bd; - if (!m || !str) { - www_SetErr(EINVAL, "Mime part or string is NULL"); + if (!m || !str || (ssize_t) len < 0) { + www_SetErr(EINVAL, "Mime part, string is NULL or length is less 0"); return -1; }