[libsoup] Don't send URI fragment when requesting via proxy
- From: Dan Winship <danw src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [libsoup] Don't send URI fragment when requesting via proxy
- Date: Fri, 18 Dec 2009 18:42:23 +0000 (UTC)
commit 9facd9ed639d92f224b402cbf5d88adc5ccf0413
Author: Dan Winship <danw gnome org>
Date: Fri Dec 18 19:40:28 2009 +0100
Don't send URI fragment when requesting via proxy
and add a test for it
libsoup/soup-message-client-io.c | 7 +++++
tests/httpd.conf.in | 2 +-
tests/proxy-test.c | 51 ++++++++++++++++++++++++++++++++++++++
3 files changed, 59 insertions(+), 1 deletions(-)
---
diff --git a/libsoup/soup-message-client-io.c b/libsoup/soup-message-client-io.c
index 654b320..618652f 100644
--- a/libsoup/soup-message-client-io.c
+++ b/libsoup/soup-message-client-io.c
@@ -96,6 +96,13 @@ get_request_headers (SoupMessage *req, GString *header,
* just the path.
*/
uri_string = soup_uri_to_string (uri, !proxy);
+
+ if (proxy && uri->fragment) {
+ /* Strip fragment */
+ char *fragment = strchr (uri_string, '#');
+ if (fragment)
+ *fragment = '\0';
+ }
}
if (priv->http_version == SOUP_HTTP_1_0) {
diff --git a/tests/httpd.conf.in b/tests/httpd.conf.in
index b893fdc..164cc00 100644
--- a/tests/httpd.conf.in
+++ b/tests/httpd.conf.in
@@ -46,7 +46,7 @@ Listen 127.0.0.1:47526
</Proxy>
# Allow local http connections
- <Proxy http://127.0.0.1:47524*>
+ <Proxy http://127.0.0.1*>
Order Allow,Deny
Allow from all
</Proxy>
diff --git a/tests/proxy-test.c b/tests/proxy-test.c
index 8be846b..d0c348e 100644
--- a/tests/proxy-test.c
+++ b/tests/proxy-test.c
@@ -143,9 +143,52 @@ run_test (int i, gboolean sync)
debug_printf (1, "\n");
}
+static void
+server_callback (SoupServer *server, SoupMessage *msg,
+ const char *path, GHashTable *query,
+ SoupClientContext *context, gpointer data)
+{
+ SoupURI *uri = soup_message_get_uri (msg);
+
+ soup_message_set_status (msg, uri->fragment ? SOUP_STATUS_BAD_REQUEST : SOUP_STATUS_OK);
+}
+
+static void
+do_proxy_fragment_test (SoupURI *base_uri)
+{
+ SoupSession *session;
+ SoupURI *proxy_uri, *req_uri;
+ SoupMessage *msg;
+
+ debug_printf (1, "\nTesting request with fragment via proxy\n");
+
+ proxy_uri = soup_uri_new (proxies[SIMPLE_PROXY]);
+ session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
+ SOUP_SESSION_PROXY_URI, proxy_uri,
+ NULL);
+ soup_uri_free (proxy_uri);
+
+ req_uri = soup_uri_new_with_base (base_uri, "/#foo");
+ msg = soup_message_new_from_uri (SOUP_METHOD_GET, req_uri);
+ soup_uri_free (req_uri);
+ soup_session_send_message (session, msg);
+
+ if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) {
+ debug_printf (1, " unexpected status %d %s!\n",
+ msg->status_code, msg->reason_phrase);
+ errors++;
+ }
+
+ g_object_unref (msg);
+ soup_session_abort (session);
+ g_object_unref (session);
+}
+
int
main (int argc, char **argv)
{
+ SoupServer *server;
+ SoupURI *base_uri;
int i;
test_init (argc, argv, NULL);
@@ -156,6 +199,14 @@ main (int argc, char **argv)
run_test (i, TRUE);
}
+ server = soup_test_server_new (TRUE);
+ soup_server_add_handler (server, NULL, server_callback, NULL, NULL);
+ base_uri = soup_uri_new ("http://127.0.0.1/");
+ soup_uri_set_port (base_uri, soup_server_get_port (server));
+
+ do_proxy_fragment_test (base_uri);
+
+ soup_uri_free (base_uri);
test_cleanup ();
return errors != 0;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]