| | @@ -258,11 +258,11 @@ |
| 258 | 258 | zTok = strtok_r(0, ",\"",&zPos)){} |
| 259 | 259 | fossil_free(zBuf); |
| 260 | 260 | if(zTok) return 1; |
| 261 | 261 | } |
| 262 | 262 | } |
| 263 | | - |
| 263 | + |
| 264 | 264 | return 0; |
| 265 | 265 | } |
| 266 | 266 | #endif |
| 267 | 267 | |
| 268 | 268 | /* |
| | @@ -465,11 +465,11 @@ |
| 465 | 465 | ** must be made of zValue. |
| 466 | 466 | */ |
| 467 | 467 | void cgi_setenv(const char *zName, const char *zValue){ |
| 468 | 468 | cgi_set_parameter_nocopy(zName, mprintf("%s",zValue)); |
| 469 | 469 | } |
| 470 | | - |
| 470 | + |
| 471 | 471 | |
| 472 | 472 | /* |
| 473 | 473 | ** Add a list of query parameters or cookies to the parameter set. |
| 474 | 474 | ** |
| 475 | 475 | ** Each parameter is of the form NAME=VALUE. Both the NAME and the |
| | @@ -498,24 +498,25 @@ |
| 498 | 498 | while( *z ){ |
| 499 | 499 | char *zName; |
| 500 | 500 | char *zValue; |
| 501 | 501 | while( fossil_isspace(*z) ){ z++; } |
| 502 | 502 | zName = z; |
| 503 | | - while( *z && *z!='=' && *z!=terminator ){ z++; } |
| 504 | | - if( *z=='=' ){ |
| 505 | | - *z = 0; |
| 506 | | - z++; |
| 507 | | - zValue = z; |
| 508 | | - while( *z && *z!=terminator ){ z++; } |
| 509 | | - if( *z ){ |
| 510 | | - *z = 0; |
| 511 | | - z++; |
| 512 | | - } |
| 503 | + zValue = 0; |
| 504 | + while( *z ){ |
| 505 | + if( *z==terminator ){ |
| 506 | + *z++ = 0; break; |
| 507 | + } |
| 508 | + if( !zValue && (*z=='=') ){ |
| 509 | + *z = 0; |
| 510 | + zValue = z+1; |
| 511 | + } |
| 512 | + z++; |
| 513 | + } |
| 514 | + if( zValue ){ |
| 513 | 515 | dehttpize(zValue); |
| 514 | 516 | }else{ |
| 515 | | - if( *z ){ *z++ = 0; } |
| 516 | | - zValue = ""; |
| 517 | + zValue = zName; |
| 517 | 518 | } |
| 518 | 519 | if( fossil_islower(zName[0]) ){ |
| 519 | 520 | cgi_set_parameter_nocopy(zName, zValue); |
| 520 | 521 | } |
| 521 | 522 | #ifdef FOSSIL_ENABLE_JSON |
| | @@ -582,11 +583,11 @@ |
| 582 | 583 | break; |
| 583 | 584 | } |
| 584 | 585 | } |
| 585 | 586 | *pz = &z[i]; |
| 586 | 587 | get_line_from_string(pz, pLen); |
| 587 | | - return z; |
| 588 | + return z; |
| 588 | 589 | } |
| 589 | 590 | |
| 590 | 591 | /* |
| 591 | 592 | ** Tokenize a line of text into as many as nArg tokens. Make |
| 592 | 593 | ** azArg[] point to the start of each token. |
| | @@ -689,11 +690,11 @@ |
| 689 | 690 | cgi_set_parameter_nocopy(mprintf("%s:mimetype",zName), z); |
| 690 | 691 | } |
| 691 | 692 | } |
| 692 | 693 | } |
| 693 | 694 | } |
| 694 | | - } |
| 695 | + } |
| 695 | 696 | } |
| 696 | 697 | |
| 697 | 698 | |
| 698 | 699 | #ifdef FOSSIL_ENABLE_JSON |
| 699 | 700 | /* |
| | @@ -833,11 +834,11 @@ |
| 833 | 834 | z = (char*)P("HTTP_COOKIE"); |
| 834 | 835 | if( z ){ |
| 835 | 836 | z = mprintf("%s",z); |
| 836 | 837 | add_param_list(z, ';'); |
| 837 | 838 | } |
| 838 | | - |
| 839 | + |
| 839 | 840 | z = (char*)P("QUERY_STRING"); |
| 840 | 841 | if( z ){ |
| 841 | 842 | z = mprintf("%s",z); |
| 842 | 843 | add_param_list(z, '&'); |
| 843 | 844 | } |
| | @@ -849,11 +850,11 @@ |
| 849 | 850 | |
| 850 | 851 | len = atoi(PD("CONTENT_LENGTH", "0")); |
| 851 | 852 | g.zContentType = zType = P("CONTENT_TYPE"); |
| 852 | 853 | if( len>0 && zType ){ |
| 853 | 854 | blob_zero(&g.cgiIn); |
| 854 | | - if( fossil_strcmp(zType,"application/x-www-form-urlencoded")==0 |
| 855 | + if( fossil_strcmp(zType,"application/x-www-form-urlencoded")==0 |
| 855 | 856 | || strncmp(zType,"multipart/form-data",19)==0 ){ |
| 856 | 857 | z = fossil_malloc( len+1 ); |
| 857 | 858 | len = fread(z, 1, len, g.httpIn); |
| 858 | 859 | z[len] = 0; |
| 859 | 860 | cgi_trace(z); |
| | @@ -879,11 +880,11 @@ |
| 879 | 880 | /* FIXMEs: |
| 880 | 881 | |
| 881 | 882 | - See if fossil really needs g.cgiIn to be set for this purpose |
| 882 | 883 | (i don't think it does). If it does then fill g.cgiIn and |
| 883 | 884 | refactor to parse the JSON from there. |
| 884 | | - |
| 885 | + |
| 885 | 886 | - After parsing POST JSON, copy the "first layer" of keys/values |
| 886 | 887 | to cgi_setenv(), honoring the upper-case distinction used |
| 887 | 888 | in add_param_list(). However... |
| 888 | 889 | |
| 889 | 890 | - If we do that then we might get a disconnect in precedence of |
| | @@ -1196,20 +1197,20 @@ |
| 1196 | 1197 | for(i=0; zToken[i] && zToken[i]!='?'; i++){} |
| 1197 | 1198 | if( zToken[i] ) zToken[i++] = 0; |
| 1198 | 1199 | cgi_setenv("PATH_INFO", zToken); |
| 1199 | 1200 | cgi_setenv("QUERY_STRING", &zToken[i]); |
| 1200 | 1201 | if( zIpAddr==0 && |
| 1201 | | - getpeername(fileno(g.httpIn), (struct sockaddr*)&remoteName, |
| 1202 | + getpeername(fileno(g.httpIn), (struct sockaddr*)&remoteName, |
| 1202 | 1203 | &size)>=0 |
| 1203 | 1204 | ){ |
| 1204 | 1205 | zIpAddr = inet_ntoa(remoteName.sin_addr); |
| 1205 | 1206 | } |
| 1206 | | - if( zIpAddr ){ |
| 1207 | + if( zIpAddr ){ |
| 1207 | 1208 | cgi_setenv("REMOTE_ADDR", zIpAddr); |
| 1208 | 1209 | g.zIpAddr = mprintf("%s", zIpAddr); |
| 1209 | 1210 | } |
| 1210 | | - |
| 1211 | + |
| 1211 | 1212 | /* Get all the optional fields that follow the first line. |
| 1212 | 1213 | */ |
| 1213 | 1214 | while( fgets(zLine,sizeof(zLine),g.httpIn) ){ |
| 1214 | 1215 | char *zFieldName; |
| 1215 | 1216 | char *zVal; |
| | @@ -1249,11 +1250,11 @@ |
| 1249 | 1250 | cgi_init(); |
| 1250 | 1251 | cgi_trace(0); |
| 1251 | 1252 | } |
| 1252 | 1253 | |
| 1253 | 1254 | #if INTERFACE |
| 1254 | | -/* |
| 1255 | +/* |
| 1255 | 1256 | ** Bitmap values for the flags parameter to cgi_http_server(). |
| 1256 | 1257 | */ |
| 1257 | 1258 | #define HTTP_SERVER_LOCALHOST 0x0001 /* Bind to 127.0.0.1 only */ |
| 1258 | 1259 | |
| 1259 | 1260 | #endif /* INTERFACE */ |
| | @@ -1385,11 +1386,11 @@ |
| 1385 | 1386 | /* Bury dead children */ |
| 1386 | 1387 | while( waitpid(0, 0, WNOHANG)>0 ){ |
| 1387 | 1388 | nchildren--; |
| 1388 | 1389 | } |
| 1389 | 1390 | } |
| 1390 | | - /* NOT REACHED */ |
| 1391 | + /* NOT REACHED */ |
| 1391 | 1392 | fossil_exit(1); |
| 1392 | 1393 | #endif |
| 1393 | 1394 | /* NOT REACHED */ |
| 1394 | 1395 | return 0; |
| 1395 | 1396 | } |
| | @@ -1473,11 +1474,11 @@ |
| 1473 | 1474 | p->tm_mon %= 12; |
| 1474 | 1475 | } |
| 1475 | 1476 | isLeapYr = p->tm_year%4==0 && (p->tm_year%100!=0 || (p->tm_year+300)%400==0); |
| 1476 | 1477 | p->tm_yday = priorDays[p->tm_mon] + p->tm_mday - 1; |
| 1477 | 1478 | if( isLeapYr && p->tm_mon>1 ) p->tm_yday++; |
| 1478 | | - nDay = (p->tm_year-70)*365 + (p->tm_year-69)/4 -p->tm_year/100 + |
| 1479 | + nDay = (p->tm_year-70)*365 + (p->tm_year-69)/4 -p->tm_year/100 + |
| 1479 | 1480 | (p->tm_year+300)/400 + p->tm_yday; |
| 1480 | 1481 | t = ((nDay*24 + p->tm_hour)*60 + p->tm_min)*60 + p->tm_sec; |
| 1481 | 1482 | return t; |
| 1482 | 1483 | } |
| 1483 | 1484 | |
| 1484 | 1485 | |