--- libaitwww/src/aitwww.c 2012/03/09 12:47:06 1.1.1.1.2.4 +++ libaitwww/src/aitwww.c 2012/07/31 11:56:16 1.3.4.1 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitwww.c,v 1.1.1.1.2.4 2012/03/09 12:47:06 misho Exp $ +* $Id: aitwww.c,v 1.3.4.1 2012/07/31 11:56:16 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -44,7 +44,6 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF TH SUCH DAMAGE. */ #include "global.h" -#include "tools.h" #include "mime.h" @@ -76,9 +75,9 @@ www_SetErr(int eno, char *estr, ...) va_list lst; www_Errno = eno; - memset(www_Error, 0, STRSIZ); + memset(www_Error, 0, sizeof www_Errno); va_start(lst, estr); - vsnprintf(www_Error, STRSIZ, estr, lst); + vsnprintf(www_Error, sizeof www_Errno, estr, lst); va_end(lst); } @@ -99,14 +98,14 @@ www_initCGI(void) str = getenv("REQUEST_METHOD"); if (!str) { - www_SetErr(EBADMSG, "Request method not found"); + www_SetErr(EFAULT, "Request method not found"); return NULL; } if (!strcmp(str, "GET") || !strcmp(str, "HEAD")) { /* GET | HEAD */ str = getenv("QUERY_STRING"); if (!str) { - www_SetErr(EBADMSG, "Query string not found"); + www_SetErr(EFAULT, "Query string not found"); return NULL; } cgi = www_parseQuery(str); @@ -114,19 +113,19 @@ www_initCGI(void) /* POST */ str = getenv("CONTENT_LENGTH"); if (!str) { - www_SetErr(EBADMSG, "Content length not found"); + www_SetErr(EFAULT, "Content length not found"); return NULL; } else ctlen = strtol(str, NULL, 0); s = getenv("CONTENT_TYPE"); if (!s) { - www_SetErr(EBADMSG, "Content type not found"); + www_SetErr(EFAULT, "Content type not found"); return NULL; } if (www_cmp(s, "multipart/form-data") && www_cmp(s, "application/x-www-form-urlencoded")) { - www_SetErr(EBADMSG, "MIME parts are broken"); + www_SetErr(EFAULT, "MIME parts are broken"); return NULL; } @@ -135,7 +134,8 @@ www_initCGI(void) if (!str) { LOGERR; return NULL; - } + } else + memset(str, 0, ctlen + 1); for (i = 0; i < ctlen && (rlen = read(STDIN_FILENO, (void*) str + i, ctlen - i)) > 0; i += rlen); str[ctlen] = 0; @@ -148,7 +148,7 @@ www_initCGI(void) free(str); } else { /* Unknown method */ - www_SetErr(EBADMSG, "Unknown request method"); + www_SetErr(EFAULT, "Unknown request method"); return NULL; } @@ -532,6 +532,10 @@ www_parseMultiPart(const char *str, int ctlen, const c SLIST_FOREACH(m, mime, mime_node) { s = mime_getValue(m, "content-disposition"); attr = www_parseAttributes(&s); + if (!www_getAttribute(attr, "name")) { + www_freeAttributes(&attr); + continue; + } t = malloc(sizeof(struct tagCGI)); if (!t) {