X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=getcgi.c;fp=getcgi.c;h=7c0656020690be5e14dddb57fcf5fb8a98f59f52;hb=c0fee41b459cc3822d890bac98882a6c9696c033;hp=c6f60c89afd5d6ce977733d252c384fa84039586;hpb=e82fd57b92d94287f728e37a3e17aaab11b722b8;p=onak.git diff --git a/getcgi.c b/getcgi.c index c6f60c8..7c06560 100644 --- a/getcgi.c +++ b/getcgi.c @@ -139,7 +139,7 @@ void unescape_url(char *url) char **getcgivars(int argc, char *argv[]) { int i; - char *request_method; + char *request_method, *env; int content_length, paircount; char *cgiinput = NULL; char **cgivars = NULL; @@ -161,27 +161,31 @@ char **getcgivars(int argc, char *argv[]) return NULL; } else if (!strcmp(request_method, "GET") || !strcmp(request_method, "HEAD")) { - cgiinput=strdup(getenv("QUERY_STRING")); + env = getenv("QUERY_STRING"); + if (env != NULL) { + cgiinput = strdup(env); + } } else if (!strcmp(request_method, "POST")) { - if (getenv("CONTENT_TYPE") != NULL && - strcasecmp(getenv("CONTENT_TYPE"), - "application/x-www-form-urlencoded")) { + env = getenv("CONTENT_TYPE"); + if ((env != NULL) && strcasecmp(env, + "application/x-www-form-urlencoded")) { printf("getcgivars(): Unsupported Content-Type.\n"); exit(1); } - - if (!(content_length = atoi(getenv("CONTENT_LENGTH")))) { + + env = getenv("CONTENT_LENGTH"); + if ((env == NULL) || !(content_length = atoi(env))) { printf("getcgivars(): No Content-Length was sent with" " the POST request.\n"); exit(1); } - - if (!(cgiinput= (char *) malloc(content_length+1))) { + + if (!(cgiinput = (char *) malloc(content_length+1))) { printf("getcgivars(): Could not malloc for " "cgiinput.\n"); exit(1); } - + if (!fread(cgiinput, content_length, 1, stdin)) { printf("Couldn't read CGI input from STDIN.\n"); exit(1); @@ -194,6 +198,11 @@ char **getcgivars(int argc, char *argv[]) exit(1); } + /* If we didn't get any cgiinput info, nothing to return */ + if (cgiinput == NULL) { + return NULL; + } + /* Change all plusses back to spaces */ for(i=0; cgiinput[i]; i++) if (cgiinput[i]=='+') cgiinput[i] = ' ';