summaryrefslogtreecommitdiff
path: root/sys/src/cmd/webfs
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@rei2.9hal>2012-01-28 18:04:25 +0100
committercinap_lenrek <cinap_lenrek@rei2.9hal>2012-01-28 18:04:25 +0100
commit1c521567a170e1e416f147de501d53414e71fb05 (patch)
tree0f4a6ce82c7165479b502ae1b7b719e9d38ab007 /sys/src/cmd/webfs
parentb70a7fc963cd58445c55b1d1702e151a39e3fc07 (diff)
webfs: fix broken handling of + character in urls
Diffstat (limited to 'sys/src/cmd/webfs')
-rw-r--r--sys/src/cmd/webfs/url.c11
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, "/");