From aafe8b7d1b55adb2f4711a59d80676f1a1c85d65 Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Fri, 18 Jan 2013 12:23:11 +0000 Subject: changes --- src/transport/plugin_transport_http_common.c | 18 +++++++- src/transport/test_http_common.c | 63 ++++++++++++++++++++++++---- 2 files changed, 72 insertions(+), 9 deletions(-) (limited to 'src/transport') diff --git a/src/transport/plugin_transport_http_common.c b/src/transport/plugin_transport_http_common.c index 817338426..13ac3d043 100644 --- a/src/transport/plugin_transport_http_common.c +++ b/src/transport/plugin_transport_http_common.c @@ -47,7 +47,6 @@ http_split_address (const char * addr) char *v6_end = NULL; char *port_start = NULL; char *path_start = NULL; - protocol_start = src; sp = GNUNET_malloc (sizeof (struct SplittedHTTPAddress)); @@ -103,6 +102,14 @@ http_split_address (const char * addr) port_start[0] = '\0'; port_start ++; sp->port = atoi (port_start); + if ((0 == sp->port) || (65535 < sp->port)) + { + GNUNET_free (src); + GNUNET_free (sp->protocol); + GNUNET_free (sp->path); + GNUNET_free (sp); + return NULL; + } } else { @@ -119,6 +126,14 @@ http_split_address (const char * addr) port_start[0] = '\0'; port_start ++; sp->port = atoi (port_start); + if ((0 == sp->port) || (65535 < sp->port)) + { + GNUNET_free (src); + GNUNET_free (sp->protocol); + GNUNET_free (sp->path); + GNUNET_free (sp); + return NULL; + } } } else @@ -150,7 +165,6 @@ http_split_address (const char * addr) return NULL; } GNUNET_free (src); - //fprintf (stderr, "addr: `%s' protocol: `%s', host `%s' port `%u' path `%s'\n", addr, sp->protocol, sp->host, sp->port, sp->path); return sp; } diff --git a/src/transport/test_http_common.c b/src/transport/test_http_common.c index d7a203336..c97ae1745 100644 --- a/src/transport/test_http_common.c +++ b/src/transport/test_http_common.c @@ -112,7 +112,7 @@ check (struct SplittedHTTPAddress *addr, return GNUNET_OK; } -void +int check_pass (char *src, char * protocol, char * host, @@ -124,33 +124,55 @@ check_pass (char *src, if (NULL == spa) { GNUNET_break (0); + return GNUNET_SYSERR; } else { if (GNUNET_OK != check(spa, protocol, host, port, path)) { + clean (spa); GNUNET_break (0); + return GNUNET_SYSERR; } clean (spa); } + return GNUNET_OK; +} + +int +check_fail (char *src) +{ + struct SplittedHTTPAddress * spa; + spa = http_split_address (src); + if (NULL != spa) + { + GNUNET_break (0); + clean (spa); + return GNUNET_SYSERR; + } + return GNUNET_OK; } + void -test_hostname () +test_pass_hostname () { check_pass("http://test.local", "http", "test.local", HTTP_DEFAULT_PORT, ""); check_pass("http://test.local/", "http", "test.local", HTTP_DEFAULT_PORT, "/"); check_pass("http://test.local/path", "http", "test.local", HTTP_DEFAULT_PORT, "/path"); check_pass("http://test.local/path/", "http", "test.local", HTTP_DEFAULT_PORT, "/path/"); + check_pass("http://test.local/path/more", "http", "test.local", HTTP_DEFAULT_PORT, "/path/more"); check_pass("http://test.local:81", "http", "test.local", 81, ""); check_pass("http://test.local:81/", "http", "test.local", 81, "/"); check_pass("http://test.local:81/path", "http", "test.local", 81, "/path"); check_pass("http://test.local:81/path/", "http", "test.local", 81, "/path/"); + check_pass("http://test.local:81/path/more", "http", "test.local", 81, "/path/more"); } + void -test_ipv4 () +test_pass_ipv4 () { check_pass("http://127.0.0.1", "http", "127.0.0.1", HTTP_DEFAULT_PORT, ""); check_pass("http://127.0.0.1/", "http", "127.0.0.1", HTTP_DEFAULT_PORT, "/"); @@ -160,10 +182,11 @@ test_ipv4 () check_pass("http://127.0.0.1:81/", "http", "127.0.0.1", 81, "/"); check_pass("http://127.0.0.1:81/path", "http", "127.0.0.1", 81, "/path"); check_pass("http://127.0.0.1:81/path/", "http", "127.0.0.1", 81, "/path/"); + check_pass("http://127.0.0.1:81/path/more", "http", "127.0.0.1", 81, "/path/more"); } void -test_ipv6 () +test_fail_ipv6 () { check_pass("http://[::1]", "http", "[::1]", HTTP_DEFAULT_PORT, ""); check_pass("http://[::1]/", "http", "[::1]", HTTP_DEFAULT_PORT, "/"); @@ -173,9 +196,34 @@ test_ipv6 () check_pass("http://[::1]:81/", "http", "[::1]", 81, "/"); check_pass("http://[::1]:81/path", "http", "[::1]", 81, "/path"); check_pass("http://[::1]:81/path/", "http", "[::1]", 81, "/path/"); + check_pass("http://[::1]:81/path/more", "http", "[::1]", 81, "/path/more"); } +void +test_fail () +{ + if (GNUNET_SYSERR == check_fail ("")) + GNUNET_break (0); + if (GNUNET_SYSERR == check_fail ("http")) + GNUNET_break (0); + if (GNUNET_SYSERR == check_fail ("://")) + GNUNET_break (0); + if (GNUNET_SYSERR == check_fail ("http://")) + GNUNET_break (0); + if (GNUNET_SYSERR == check_fail ("//localhost")) + GNUNET_break (0); + if (GNUNET_SYSERR == check_fail ("//:80")) + GNUNET_break (0); + if (GNUNET_SYSERR == check_fail ("//:80/")) + GNUNET_break (0); + if (GNUNET_SYSERR == check_fail ("//:80:")) + GNUNET_break (0); + if (GNUNET_SYSERR == check_fail ("http://localhost:a/")) + GNUNET_break (0); + if (GNUNET_SYSERR == check_fail ("http://127.0.0.1:a/")) + GNUNET_break (0); +} int main (int argc, char *argv[]) @@ -205,9 +253,10 @@ main (int argc, char *argv[]) GNUNET_break (0); } - test_hostname (); - test_ipv4 (); - test_ipv6 (); + test_pass_hostname (); + test_pass_ipv4 (); + test_fail_ipv6 (); + test_fail (); return ret; } -- cgit v1.2.3