aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2017-07-05 13:43:21 -0400
committerNick Mathewson <nickm@torproject.org>2017-07-05 13:43:21 -0400
commit32c0066e4baa2ca16902a70b941d8d3afbc279ff (patch)
tree7cc360fa9450abe7207455f988bc34158a995643 /src
parentbb97f680e74170673246b3de32e847ade46840f2 (diff)
parent5ff0f1ab9e3a0b82b177b3f710201d0ad35b69c4 (diff)
downloadtor-32c0066e4baa2ca16902a70b941d8d3afbc279ff.tar.gz
tor-32c0066e4baa2ca16902a70b941d8d3afbc279ff.zip
Merge branch 'maint-0.2.8' into maint-0.2.9
Diffstat (limited to 'src')
-rw-r--r--src/common/compat.c8
-rw-r--r--src/test/test_addr.c9
2 files changed, 15 insertions, 2 deletions
diff --git a/src/common/compat.c b/src/common/compat.c
index 8d6a491c42..6b12753c95 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -2579,8 +2579,12 @@ tor_inet_pton(int af, const char *src, void *dst)
char *next;
ssize_t len;
long r = strtol(src, &next, 16);
- tor_assert(next != NULL);
- tor_assert(next != src);
+ if (next == NULL || next == src) {
+ /* The 'next == src' error case can happen on versions of openbsd
+ * where treats "0xfoo" as an error, rather than as "0" followed by
+ * "xfoo". */
+ return 0;
+ }
len = *next == '\0' ? eow - src : next - src;
if (len > 4)
diff --git a/src/test/test_addr.c b/src/test/test_addr.c
index 49e248014f..be440a0925 100644
--- a/src/test/test_addr.c
+++ b/src/test/test_addr.c
@@ -354,6 +354,15 @@ test_addr_ip6_helpers(void *arg)
test_pton6_bad("1.2.3.4");
test_pton6_bad(":1.2.3.4");
test_pton6_bad(".2.3.4");
+ /* Regression tests for 22789. */
+ test_pton6_bad("0xfoo");
+ test_pton6_bad("0x88");
+ test_pton6_bad("0xyxxy");
+ test_pton6_bad("0XFOO");
+ test_pton6_bad("0X88");
+ test_pton6_bad("0XYXXY");
+ test_pton6_bad("0x");
+ test_pton6_bad("0X");
/* test internal checking */
test_external_ip("fbff:ffff::2:7", 0);