summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2013-01-18 12:23:11 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2013-01-18 12:23:11 +0000
commitaafe8b7d1b55adb2f4711a59d80676f1a1c85d65 (patch)
treea837eb53006e03750134aa111e45d1cd26436b2a /src
parent3a093e6f3ac520f9c3e1f8f19ff1340f40707b4c (diff)
changes
Diffstat (limited to 'src')
-rw-r--r--src/transport/plugin_transport_http_common.c18
-rw-r--r--src/transport/test_http_common.c63
2 files changed, 72 insertions, 9 deletions
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;
}