git: 9front

Download patch

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';
--