@@ -67,7 +67,8 @@ static int url_decode_char(const char *q)
6767 return val ;
6868}
6969
70- static char * url_decode_internal (const char * * query , const char * stop_at , struct strbuf * out )
70+ static char * url_decode_internal (const char * * query , const char * stop_at ,
71+ struct strbuf * out , int decode_plus )
7172{
7273 const char * q = * query ;
7374
@@ -90,7 +91,7 @@ static char *url_decode_internal(const char **query, const char *stop_at, struct
9091 }
9192 }
9293
93- if (c == '+' )
94+ if (decode_plus && c == '+' )
9495 strbuf_addch (out , ' ' );
9596 else
9697 strbuf_addch (out , c );
@@ -110,17 +111,17 @@ char *url_decode(const char *url)
110111 strbuf_add (& out , url , colon - url );
111112 url = colon ;
112113 }
113- return url_decode_internal (& url , NULL , & out );
114+ return url_decode_internal (& url , NULL , & out , 0 );
114115}
115116
116117char * url_decode_parameter_name (const char * * query )
117118{
118119 struct strbuf out = STRBUF_INIT ;
119- return url_decode_internal (query , "&=" , & out );
120+ return url_decode_internal (query , "&=" , & out , 1 );
120121}
121122
122123char * url_decode_parameter_value (const char * * query )
123124{
124125 struct strbuf out = STRBUF_INIT ;
125- return url_decode_internal (query , "&" , & out );
126+ return url_decode_internal (query , "&" , & out , 1 );
126127}
0 commit comments