summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--content/fetch.c4
-rw-r--r--desktop/browser.c7
2 files changed, 10 insertions, 1 deletions
diff --git a/content/fetch.c b/content/fetch.c
index 97e0473b8..ac47b4a46 100644
--- a/content/fetch.c
+++ b/content/fetch.c
@@ -613,6 +613,7 @@ bool fetch_process_headers(struct fetch *f)
{
long http_code;
const char *type;
+ char *temp;
CURLcode code;
f->had_headers = true;
@@ -623,6 +624,9 @@ bool fetch_process_headers(struct fetch *f)
/* handle HTTP redirects (3xx response codes) */
if (300 <= http_code && http_code < 400 && f->location != 0) {
+ temp = curl_unescape(f->location, strlen(f->location));
+ xfree(f->location);
+ f->location = temp;
LOG(("FETCH_REDIRECT, '%s'", f->location));
f->callback(FETCH_REDIRECT, f->p, f->location, 0);
return true;
diff --git a/desktop/browser.c b/desktop/browser.c
index 275de9558..253a492ad 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -1677,7 +1677,12 @@ void browser_form_submit(struct browser_window *bw, struct form *form,
case method_GET:
data = form_url_encode(success);
url = xcalloc(1, strlen(form->action) + strlen(data) + 2);
- sprintf(url, "%s?%s", form->action, data);
+ if(form->action[strlen(form->action)-1] == '?') {
+ sprintf(url, "%s%s", form->action, data);
+ }
+ else {
+ sprintf(url, "%s?%s", form->action, data);
+ }
url1 = url_join(url, base);
if (!url1)
break;