diff options
Diffstat (limited to 'networking/httpd.c')
-rw-r--r-- | networking/httpd.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/networking/httpd.c b/networking/httpd.c index 0de60ba06..f95e0c06e 100644 --- a/networking/httpd.c +++ b/networking/httpd.c | |||
@@ -671,7 +671,7 @@ static char *encodeString(const char *string) | |||
671 | * | 671 | * |
672 | * $Parameters: | 672 | * $Parameters: |
673 | * (char *) string . . . The first string to decode. | 673 | * (char *) string . . . The first string to decode. |
674 | * (int) flag . . . 1 if require decode '+' as ' ' for CGI | 674 | * (int) flag . . . 1 if need to decode '+' as ' ' for CGI |
675 | * | 675 | * |
676 | * $Return: (char *) . . . . A pointer to the decoded string (same as input). | 676 | * $Return: (char *) . . . . A pointer to the decoded string (same as input). |
677 | * | 677 | * |
@@ -685,14 +685,18 @@ static char *decodeString(char *orig, int flag_plus_to_space) | |||
685 | char *ptr = string; | 685 | char *ptr = string; |
686 | 686 | ||
687 | while (*ptr) { | 687 | while (*ptr) { |
688 | if (*ptr == '+' && flag_plus_to_space) { *string++ = ' '; ptr++; } | 688 | if (*ptr == '+' && flag_plus_to_space) { |
689 | else if (*ptr != '%') *string++ = *ptr++; | 689 | *string++ = ' '; |
690 | else { | 690 | ptr++; |
691 | } else if (*ptr != '%') { | ||
692 | *string++ = *ptr++; | ||
693 | } else { | ||
691 | unsigned int value1, value2; | 694 | unsigned int value1, value2; |
692 | 695 | ||
693 | ptr++; | 696 | ptr++; |
694 | if (sscanf(ptr, "%1X", &value1) != 1 || | 697 | if (sscanf(ptr, "%1X", &value1) != 1 |
695 | sscanf(ptr+1, "%1X", &value2) != 1) { | 698 | || sscanf(ptr+1, "%1X", &value2) != 1 |
699 | ) { | ||
696 | if (!flag_plus_to_space) | 700 | if (!flag_plus_to_space) |
697 | return NULL; | 701 | return NULL; |
698 | *string++ = '%'; | 702 | *string++ = '%'; |