From 1c521567a170e1e416f147de501d53414e71fb05 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sat, 28 Jan 2012 18:04:25 +0100 Subject: [PATCH] webfs: fix broken handling of + character in urls --- sys/src/cmd/webfs/url.c | 11 +++++++---- 1 file 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, "/");