diff options
author | Daniel Stenberg <daniel@haxx.se> | 2019-01-28 08:44:15 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2019-01-28 08:44:15 +0100 |
commit | 1b8fe0a8ae8eb171799da50f4b3b9acea91d1b56 (patch) | |
tree | 9c9b1d8f9d8c7fd0f3a79d7989e2d3c646979eec | |
parent | b0a43aade1c786f5c15d6a9fc478c7ae305d8db6 (diff) | |
download | curl-1b8fe0a8ae8eb171799da50f4b3b9acea91d1b56.tar.gz |
unit1653: make it survive torture tests
-rw-r--r-- | tests/unit/unit1653.c | 79 |
1 files changed, 63 insertions, 16 deletions
diff --git a/tests/unit/unit1653.c b/tests/unit/unit1653.c index 4e326f51b..2f7ccd5ca 100644 --- a/tests/unit/unit1653.c +++ b/tests/unit/unit1653.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -40,106 +40,153 @@ unit_stop(void) curl_global_cleanup(); } -UNITTEST_START +#define free_and_clear(x) free(x); x = NULL +UNITTEST_START +{ CURLUcode ret; - char *ipv6port; + char *ipv6port = NULL; char *portnum; /* Valid IPv6 */ u = curl_url(); + if(!u) + goto fail; ipv6port = strdup("[fe80::250:56ff:fea7:da15]"); + if(!ipv6port) + goto fail; ret = Curl_parse_port(u, ipv6port); fail_unless(ret == CURLUE_OK, "Curl_parse_port returned error"); ret = curl_url_get(u, CURLUPART_PORT, &portnum, CURLU_NO_DEFAULT_PORT); fail_unless(ret != CURLUE_OK, "curl_url_get portnum returned something"); - free(ipv6port); + free_and_clear(ipv6port); curl_url_cleanup(u); /* Invalid IPv6 */ u = curl_url(); + if(!u) + goto fail; ipv6port = strdup("[fe80::250:56ff:fea7:da15|"); + if(!ipv6port) + goto fail; ret = Curl_parse_port(u, ipv6port); fail_unless(ret != CURLUE_OK, "Curl_parse_port true on error"); - free(ipv6port); + free_and_clear(ipv6port); curl_url_cleanup(u); u = curl_url(); + if(!u) + goto fail; ipv6port = strdup("[fe80::250:56ff;fea7:da15]:80"); + if(!ipv6port) + goto fail; ret = Curl_parse_port(u, ipv6port); fail_unless(ret != CURLUE_OK, "Curl_parse_port true on error"); - free(ipv6port); + free_and_clear(ipv6port); curl_url_cleanup(u); /* Valid IPv6 with zone index and port number */ u = curl_url(); + if(!u) + goto fail; ipv6port = strdup("[fe80::250:56ff:fea7:da15%25eth3]:80"); + if(!ipv6port) + goto fail; ret = Curl_parse_port(u, ipv6port); fail_unless(ret == CURLUE_OK, "Curl_parse_port returned error"); ret = curl_url_get(u, CURLUPART_PORT, &portnum, 0); fail_unless(ret == CURLUE_OK, "curl_url_get portnum returned error"); - fail_unless(strcmp(portnum, "80") == 0, "Check portnumber"); + fail_unless(portnum && !strcmp(portnum, "80"), "Check portnumber"); curl_free(portnum); - free(ipv6port); + free_and_clear(ipv6port); curl_url_cleanup(u); /* Valid IPv6 with zone index without port number */ u = curl_url(); + if(!u) + goto fail; ipv6port = strdup("[fe80::250:56ff:fea7:da15%25eth3]"); + if(!ipv6port) + goto fail; ret = Curl_parse_port(u, ipv6port); fail_unless(ret == CURLUE_OK, "Curl_parse_port returned error"); - free(ipv6port); + free_and_clear(ipv6port); curl_url_cleanup(u); /* Valid IPv6 with port number */ u = curl_url(); + if(!u) + goto fail; ipv6port = strdup("[fe80::250:56ff:fea7:da15]:81"); + if(!ipv6port) + goto fail; ret = Curl_parse_port(u, ipv6port); fail_unless(ret == CURLUE_OK, "Curl_parse_port returned error"); ret = curl_url_get(u, CURLUPART_PORT, &portnum, 0); fail_unless(ret == CURLUE_OK, "curl_url_get portnum returned error"); - fail_unless(strcmp(portnum, "81") == 0, "Check portnumber"); + fail_unless(portnum && !strcmp(portnum, "81"), "Check portnumber"); curl_free(portnum); - free(ipv6port); + free_and_clear(ipv6port); curl_url_cleanup(u); /* Valid IPv6 with syntax error in the port number */ u = curl_url(); + if(!u) + goto fail; ipv6port = strdup("[fe80::250:56ff:fea7:da15];81"); + if(!ipv6port) + goto fail; ret = Curl_parse_port(u, ipv6port); fail_unless(ret != CURLUE_OK, "Curl_parse_port true on error"); - free(ipv6port); + free_and_clear(ipv6port); curl_url_cleanup(u); u = curl_url(); + if(!u) + goto fail; ipv6port = strdup("[fe80::250:56ff:fea7:da15]80"); + if(!ipv6port) + goto fail; ret = Curl_parse_port(u, ipv6port); fail_unless(ret != CURLUE_OK, "Curl_parse_port true on error"); - free(ipv6port); + free_and_clear(ipv6port); curl_url_cleanup(u); /* Valid IPv6 with no port after the colon, should use default */ u = curl_url(); + if(!u) + goto fail; ipv6port = strdup("[fe80::250:56ff:fea7:da15]:"); + if(!ipv6port) + goto fail; ret = Curl_parse_port(u, ipv6port); fail_unless(ret == CURLUE_OK, "Curl_parse_port returned error"); - free(ipv6port); + free_and_clear(ipv6port); curl_url_cleanup(u); /* Incorrect zone index syntax */ u = curl_url(); + if(!u) + goto fail; ipv6port = strdup("[fe80::250:56ff:fea7:da15%!25eth3]:80"); + if(!ipv6port) + goto fail; ret = Curl_parse_port(u, ipv6port); fail_unless(ret != CURLUE_OK, "Curl_parse_port returned non-error"); - free(ipv6port); + free_and_clear(ipv6port); curl_url_cleanup(u); /* Non percent-encoded zone index */ u = curl_url(); + if(!u) + goto fail; ipv6port = strdup("[fe80::250:56ff:fea7:da15%eth3]:80"); + if(!ipv6port) + goto fail; ret = Curl_parse_port(u, ipv6port); fail_unless(ret != CURLUE_OK, "Curl_parse_port returned non-error"); + fail: free(ipv6port); curl_url_cleanup(u); - +} UNITTEST_STOP |