X-Git-Url: http://the.earth.li/gitweb/?a=blobdiff_plain;f=getcgi.c;h=7c0656020690be5e14dddb57fcf5fb8a98f59f52;hb=b767e3e90280a1222fc4404cbd4c832342c9382d;hp=203584149b1e38320b397916a7ea161aae7d6162;hpb=5e1b22d763640c4d7a09d07920403d8d491b4410;p=onak.git
diff --git a/getcgi.c b/getcgi.c
index 2035841..7c06560 100644
--- a/getcgi.c
+++ b/getcgi.c
@@ -16,8 +16,7 @@
* more details.
*
* You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 51
- * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * this program. If not, see .
*/
#include
@@ -140,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;
@@ -162,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);
@@ -195,19 +198,24 @@ 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] = ' ';
/* First, split on "&" to extract the name-value pairs into pairlist */
- pairlist=(char **) malloc(256*sizeof(char **));
+ pairlist= malloc(256*sizeof(char *));
paircount=0;
nvpair=strtok(cgiinput, "&");
while (nvpair) {
pairlist[paircount++]= strdup(nvpair) ;
if (!(paircount%256)) {
- pairlist=(char **) realloc(pairlist,
- (paircount+256)*sizeof(char **));
+ pairlist= realloc(pairlist,
+ (paircount+256)*sizeof(char *));
}
nvpair=strtok(NULL, "&") ;
}
@@ -216,7 +224,7 @@ char **getcgivars(int argc, char *argv[])
/* Then, from the list of pairs, extract the names and values */
- cgivars=(char **) malloc((paircount*2+1)*sizeof(char **));
+ cgivars= malloc((paircount*2+1)*sizeof(char *));
for (i=0; i