From 60eab89f10319fed1b5c6174a301b25f514c72b1 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Thu, 31 Aug 2000 12:03:04 +0000 Subject: in unescape(), '+' is now only converted to space after the first '?' --- lib/escape.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'lib/escape.c') diff --git a/lib/escape.c b/lib/escape.c index 0a8c5cf37..c728b80f8 100644 --- a/lib/escape.c +++ b/lib/escape.c @@ -41,6 +41,9 @@ /* Escape and unescape URL encoding in strings. The functions return a new * allocated string or NULL if an error occurred. */ +#include "setup.h" +#include + #include #include #include @@ -88,17 +91,24 @@ char *curl_unescape(char *string, int length) unsigned char in; int index=0; int hex; + char querypart=FALSE; /* everything to the right of a '?' letter is + the "query part" where '+' should become ' '. + RFC 2316, section 3.10 */ while(--alloc) { in = *string; - if('+' == in) - in = ' '; + if(querypart && ('+' == in)) + in = ' '; + else if(!querypart && ('?' == in)) { + /* we have "walked in" to the query part */ + querypart=TRUE; + } else if('%' == in) { - /* encoded part */ - if(sscanf(string+1, "%02X", &hex)) { - in = hex; - string+=2; - } + /* encoded part */ + if(sscanf(string+1, "%02X", &hex)) { + in = hex; + string+=2; + } } ns[index++] = in; -- cgit v1.2.3