From c6b01fcc32956518ce010d4d367b844c006958d2 Mon Sep 17 00:00:00 2001 From: Jan Engelhardt Date: Mon, 4 Mar 2024 11:45:49 +0100 Subject: url: repair off-by-one bug in extractHost (#297) `hostPart[len]` is pointing to `]`, but we need to check the char after that. Fixes: v0.9.2-187-g874a1d8c --- src/vmime/utility/url.cpp | 2 +- tests/utility/urlTest.cpp | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/vmime/utility/url.cpp b/src/vmime/utility/url.cpp index 334e78fc..e8978d28 100644 --- a/src/vmime/utility/url.cpp +++ b/src/vmime/utility/url.cpp @@ -180,7 +180,7 @@ static bool extractHostIPv6(string& hostPart, string& host, string& port) { host.assign(&hostPart[1], len - 1); - if (hostPart[len] == '\0') { + if (hostPart[len + 1] == '\0') { return true; } if (hostPart[len + 1] != ':') { diff --git a/tests/utility/urlTest.cpp b/tests/utility/urlTest.cpp index c792c772..aca8300e 100644 --- a/tests/utility/urlTest.cpp +++ b/tests/utility/urlTest.cpp @@ -35,7 +35,8 @@ VMIME_TEST_SUITE_BEGIN(urlTest) VMIME_TEST(testParse3) VMIME_TEST(testParse4) VMIME_TEST(testParse5) - VMIME_TEST(testParseIPv6) + VMIME_TEST(testParseIPv6Full) + VMIME_TEST(testParseIPv6NoPort) VMIME_TEST(testGenerate) VMIME_TEST(testUtilsEncode) VMIME_TEST(testUtilsDecode) @@ -202,7 +203,7 @@ VMIME_TEST_SUITE_BEGIN(urlTest) VASSERT_EQ("4", "myserver.com", u1.getHost()); } - void testParseIPv6() { + void testParseIPv6Full() { vmime::utility::url u1("", ""); @@ -214,6 +215,14 @@ VMIME_TEST_SUITE_BEGIN(urlTest) VASSERT_EQ("6", "/p", u1.getPath()); } + void testParseIPv6NoPort() { + + vmime::utility::url u1("", ""); + + VASSERT_EQ("1", true, parseHelper(u1, "http://[::1]/")); + VASSERT_EQ("2", "::1", u1.getHost()); + } + void testGenerate() { vmime::utility::url u1("proto", "host", 12345, "path", "user", "password"); -- cgit v1.2.3