ref: 88e161c34664af8571cd6242b67135ba4eb64450
parent: 25146a541c6a65b1719f0e0992913b23cf1d20d5
author: cinap_lenrek <cinap_lenrek@centraldogma>
date: Fri Nov 18 23:31:24 EST 2011
webfs: leave ; and / in url-query alone, add space + subsitution
--- a/sys/src/cmd/webfs/url.c
+++ b/sys/src/cmd/webfs/url.c
@@ -671,7 +671,7 @@
if(su->query.s == nil)
return 0;
s = estredup(su->query.s, su->query.e);
- u->query = unescapeurl(s, "&=");
+ u->query = unescapeurl(s, "&;=/");
free(s);
return 0;
}
@@ -713,7 +713,7 @@
}
p = escapeurl(u->path, "/");
if(u->query){- q = escapeurl(u->query, "&=");
+ q = escapeurl(u->query, "&;=/");
u->http.page_spec = emalloc(strlen(p)+1+strlen(q)+1);
strcpy(u->http.page_spec, p);
strcat(u->http.page_spec, "?");
@@ -929,7 +929,7 @@
return 0;
}
free(u->query);
- u->query = unescapeurl(query, "&=");
+ u->query = unescapeurl(query, "&;=/");
return 0;
}
@@ -998,6 +998,8 @@
(*s >= 'A' && *s <= 'Z') ||
strchr(".-_~", *s) || strchr(special, *s))*u++ = *s;
+ else if(s[0] == ' ')
+ *u++ = '+';
else {*u++ = '%';
*u++ = hex[(*s>>4)&0xF];
@@ -1022,7 +1024,8 @@
x = *r;
else
r += 2;
- }
+ } else if(x=='+')
+ x = ' ';
*w++ = x;
}
*w = '\0';
--
⑨