Correctly handle forms that have URI-encoded parameter names. #563302,
authorDan Winship <danw@src.gnome.org>
Fri, 5 Dec 2008 03:57:05 +0000 (03:57 +0000)
committerDan Winship <danw@src.gnome.org>
Fri, 5 Dec 2008 03:57:05 +0000 (03:57 +0000)
* libsoup/soup-form.c (soup_form_decode): Correctly handle forms
that have URI-encoded parameter names. #563302, Evan Nemerson.

* tests/forms-test.c: test that

svn path=/trunk/; revision=1220

ChangeLog
libsoup/soup-form.c
tests/forms-test.c

index 5625efd..760be25 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-12-04  Dan Winship  <danw@gnome.org>
+
+       * libsoup/soup-form.c (soup_form_decode): Correctly handle forms
+       that have URI-encoded parameter names. #563302, Evan Nemerson.
+
+       * tests/forms-test.c: test that
+
 2008-12-03  Dan Winship  <danw@gnome.org>
 
        * libsoup/soup-proxy-resolver-gconf.c (finalize): disconnect from
index 3ef9da6..1bcc603 100644 (file)
@@ -90,15 +90,15 @@ soup_form_decode (const char *encoded_form)
        for (i = 0; pairs[i]; i++) {
                name = pairs[i];
                eq = strchr (name, '=');
-               if (!form_decode (name)) {
-                       g_free (name);
-                       continue;
-               }
                if (eq) {
                        *eq = '\0';
                        value = eq + 1;
                } else
                        value = NULL;
+               if (!form_decode (name) || (value && !form_decode (value))) {
+                       g_free (name);
+                       continue;
+               }
 
                g_hash_table_insert (form_data_set, name, value);
        }
index e1184bf..b7ae814 100644 (file)
@@ -72,7 +72,7 @@ do_hello_test (int n, gboolean extra, const char *uri)
                g_ptr_array_add (args, title_arg);
        }
        if (tests[n].name) {
-               name_arg = soup_form_encode ("name", tests[n].name, NULL);
+               name_arg = soup_form_encode ("n@me", tests[n].name, NULL);
                g_ptr_array_add (args, "-d");
                g_ptr_array_add (args, name_arg);
        }
@@ -238,7 +238,7 @@ hello_callback (SoupServer *server, SoupMessage *msg,
 
        if (query) {
                title = g_hash_table_lookup (query, "title");
-               name = g_hash_table_lookup (query, "name");
+               name = g_hash_table_lookup (query, "n@me");
                fmt = g_hash_table_lookup (query, "fmt");
        } else
                title = name = fmt = NULL;
@@ -254,7 +254,7 @@ hello_callback (SoupServer *server, SoupMessage *msg,
                }
                g_string_append (buf, "<form action='/hello' method='get'>"
                                 "<p>Title: <input name='title'></p>"
-                                "<p>Name: <input name='name'></p>"
+                                "<p>Name: <input name='n@me'></p>"
                                 "<p><input type=hidden name='fmt' value='html'></p>"
                                 "<p><input type=submit></p>"
                                 "</form>\r\n");