diff options
author | cinap_lenrek <cinap_lenrek@rei2.9hal> | 2012-01-28 18:04:25 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@rei2.9hal> | 2012-01-28 18:04:25 +0100 |
commit | 1c521567a170e1e416f147de501d53414e71fb05 (patch) | |
tree | 0f4a6ce82c7165479b502ae1b7b719e9d38ab007 /sys/src/cmd/webfs | |
parent | b70a7fc963cd58445c55b1d1702e151a39e3fc07 (diff) |
webfs: fix broken handling of + character in urls
Diffstat (limited to 'sys/src/cmd/webfs')
-rw-r--r-- | sys/src/cmd/webfs/url.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/sys/src/cmd/webfs/url.c b/sys/src/cmd/webfs/url.c index 2137010d1..83dad1938 100644 --- a/sys/src/cmd/webfs/url.c +++ b/sys/src/cmd/webfs/url.c @@ -41,8 +41,6 @@ unescape(char *s, char *spec) r += 2; continue; } - if(x == '+') - x = ' '; *w++ = x; } *w = 0; @@ -94,11 +92,11 @@ Ufmt(Fmt *f) fmtprint(f, ":%s", u->port); } if(s = Upath(u)) - fmtprint(f, "%E", (Str2){s, "/:@"}); + fmtprint(f, "%E", (Str2){s, "/:@+"}); if(u->query) fmtprint(f, "?%E", (Str2){u->query, "/:@"}); if(u->fragment) - fmtprint(f, "#%E", (Str2){u->fragment, "/:@?"}); + fmtprint(f, "#%E", (Str2){u->fragment, "/:@?+"}); return 0; } @@ -297,6 +295,11 @@ Out: free(s); free(t); + /* the + character encodes space only in query part */ + if(s = u->query) + while(s = strchr(s, '+')) + *s++ = ' '; + unescape(u->user, ""); unescape(u->pass, ""); unescape(u->path, "/"); |