Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | For candidate CGI parameter names that start with an uppercase letter, convert them to lowercase and then add. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | noJsonCgiFlag |
Files: | files | file ages | folders |
SHA3-256: |
b47b6b6906d51af37309c572d89a9aa5 |
User & Date: | mistachkin 2019-08-27 20:57:54 |
Context
2019-09-04
| ||
20:01 | Merge updates from trunk. ... (check-in: 20c64950 user: mistachkin tags: noJsonCgiFlag) | |
2019-08-27
| ||
20:57 | For candidate CGI parameter names that start with an uppercase letter, convert them to lowercase and then add. ... (check-in: b47b6b69 user: mistachkin tags: noJsonCgiFlag) | |
12:51 | Change 'NO_JSON' to lowercase. Remove other branch changes that are now superfluous. ... (check-in: 8baac264 user: mistachkin tags: noJsonCgiFlag) | |
Changes
Changes to src/cgi.c.
︙ | ︙ | |||
487 488 489 490 491 492 493 494 495 496 497 498 499 500 | nUsedQP++; sortQP = 1; } /* ** Add another query parameter or cookie to the parameter set. ** zName is the name of the query parameter or cookie and zValue ** is its fully decoded value. ** ** Copies are made of both the zName and zValue parameters. */ void cgi_set_parameter(const char *zName, const char *zValue){ cgi_set_parameter_nocopy(mprintf("%s",zName), mprintf("%s",zValue), 0); } | > > > > > > > > > > > > > > > > > > > | 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 | nUsedQP++; sortQP = 1; } /* ** Add another query parameter or cookie to the parameter set. ** zName is the name of the query parameter or cookie and zValue ** is its fully decoded value. zName will be modified to be an ** all lowercase string. ** ** zName and zValue are not copied and must not change or be ** deallocated after this routine returns. */ void cgi_set_parameter_nocopy_tolower( char *zName, const char *zValue, int isQP ){ int i; for(i=0; zName[i]; i++){ zName[i] = fossil_tolower(zName[i]); } cgi_set_parameter_nocopy(zName, zValue, isQP); } /* ** Add another query parameter or cookie to the parameter set. ** zName is the name of the query parameter or cookie and zValue ** is its fully decoded value. ** ** Copies are made of both the zName and zValue parameters. */ void cgi_set_parameter(const char *zName, const char *zValue){ cgi_set_parameter_nocopy(mprintf("%s",zName), mprintf("%s",zValue), 0); } |
︙ | ︙ | |||
521 522 523 524 525 526 527 528 529 530 531 532 533 534 | if( fossil_strcmp(aParamQP[i].zName,zName)==0 ){ aParamQP[i].zValue = zValue; assert( aParamQP[i].isQP ); return; } } cgi_set_parameter_nocopy(zName, zValue, 1); } /* ** Delete a parameter. */ void cgi_delete_parameter(const char *zName){ int i; | > > > > > | 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 | if( fossil_strcmp(aParamQP[i].zName,zName)==0 ){ aParamQP[i].zValue = zValue; assert( aParamQP[i].isQP ); return; } } cgi_set_parameter_nocopy(zName, zValue, 1); } void cgi_replace_query_parameter_tolower(char *zName, const char *zValue){ int i; for(i=0; zName[i]; i++){ zName[i] = fossil_tolower(zName[i]); } cgi_replace_query_parameter(zName, zValue); } /* ** Delete a parameter. */ void cgi_delete_parameter(const char *zName){ int i; |
︙ | ︙ | |||
612 613 614 615 616 617 618 | z++; } dehttpize(zValue); }else{ if( *z ){ *z++ = 0; } zValue = ""; } | > | | > > > | 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 | z++; } dehttpize(zValue); }else{ if( *z ){ *z++ = 0; } zValue = ""; } if( zName[0] && fossil_no_strange_characters(zName+1) ){ if( fossil_islower(zName[0]) ){ cgi_set_parameter_nocopy(zName, zValue, isQP); }else if( fossil_isupper(zName[0]) ){ cgi_set_parameter_nocopy_tolower(zName, zValue, isQP); } } #ifdef FOSSIL_ENABLE_JSON json_setenv( zName, cson_value_new_string(zValue,strlen(zValue)) ); #endif /* FOSSIL_ENABLE_JSON */ } } |
︙ | ︙ | |||
756 757 758 759 760 761 762 | zBoundry = get_line_from_string(&z, &len); if( zBoundry==0 ) return; while( (zLine = get_line_from_string(&z, &len))!=0 ){ if( zLine[0]==0 ){ int nContent = 0; zValue = get_bounded_content(&z, &len, zBoundry, &nContent); | | > | | | | > > > > > > > > | | > > > > > | | > > > > | 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 | zBoundry = get_line_from_string(&z, &len); if( zBoundry==0 ) return; while( (zLine = get_line_from_string(&z, &len))!=0 ){ if( zLine[0]==0 ){ int nContent = 0; zValue = get_bounded_content(&z, &len, zBoundry, &nContent); if( zName && zValue ){ if( fossil_islower(zName[0]) ){ cgi_set_parameter_nocopy(zName, zValue, 1); if( showBytes ){ cgi_set_parameter_nocopy(mprintf("%s:bytes", zName), mprintf("%d",nContent), 1); } }else if( fossil_isupper(zName[0]) ){ cgi_set_parameter_nocopy_tolower(zName, zValue, 1); if( showBytes ){ cgi_set_parameter_nocopy_tolower(mprintf("%s:bytes", zName), mprintf("%d",nContent), 1); } } } zName = 0; showBytes = 0; }else{ nArg = tokenize_line(zLine, count(azArg), azArg); for(i=0; i<nArg; i++){ int c = fossil_tolower(azArg[i][0]); int n = strlen(azArg[i]); if( c=='c' && sqlite3_strnicmp(azArg[i],"content-disposition:",n)==0 ){ i++; }else if( c=='n' && sqlite3_strnicmp(azArg[i],"name=",n)==0 ){ zName = azArg[++i]; }else if( c=='f' && sqlite3_strnicmp(azArg[i],"filename=",n)==0 ){ char *z = azArg[++i]; if( zName && z ){ if( fossil_islower(zName[0]) ){ cgi_set_parameter_nocopy(mprintf("%s:filename",zName), z, 1); }else if( fossil_isupper(zName[0]) ){ cgi_set_parameter_nocopy_tolower(mprintf("%s:filename",zName), z, 1); } } showBytes = 1; }else if( c=='c' && sqlite3_strnicmp(azArg[i],"content-type:",n)==0 ){ char *z = azArg[++i]; if( zName && z ){ if( fossil_islower(zName[0]) ){ cgi_set_parameter_nocopy(mprintf("%s:mimetype",zName), z, 1); }else if( fossil_isupper(zName[0]) ){ cgi_set_parameter_nocopy_tolower(mprintf("%s:mimetype",zName), z, 1); } } } } } } } |
︙ | ︙ |
Changes to src/dispatch.c.
︙ | ︙ | |||
194 195 196 197 198 199 200 201 202 203 204 205 206 207 | zName = ""; }else{ if( *z ){ *z++ = 0; } zValue = ""; } if( fossil_islower(zName[0]) ){ cgi_replace_query_parameter(zName, zValue); } } return 0; } /* ** Fill Blob with a space-separated list of all command names that | > > | 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 | zName = ""; }else{ if( *z ){ *z++ = 0; } zValue = ""; } if( fossil_islower(zName[0]) ){ cgi_replace_query_parameter(zName, zValue); }else if( fossil_isupper(zName[0]) ){ cgi_replace_query_parameter_tolower(zName, zValue); } } return 0; } /* ** Fill Blob with a space-separated list of all command names that |
︙ | ︙ |