Skip to content

Commit 44e4b3f

Browse files
authored
Merge pull request #1406 from krzysztofwos/ipv4-address-validation
Fix IPv4 address validation
2 parents 39c29bb + be70b1f commit 44e4b3f

2 files changed

Lines changed: 12 additions & 4 deletions

File tree

api/net/ip4/addr.hpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,9 @@ struct Addr {
107107

108108
const static std::regex ipv4_address_pattern
109109
{
110-
"^\\s*(25[0–5]|2[0–4]\\d|[01]?\\d\\d?)\\."
111-
"(25[0–5]|2[0–4]\\d|[01]?\\d\\d?)\\."
112-
"(25[0–5]|2[0–4]\\d|[01]?\\d\\d?)\\."
113-
"(25[0–5]|2[0–4]\\d|[01]?\\d\\d?)\\s*$"
110+
#define OCTET_PATTERN "(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)"
111+
"^\\s*" OCTET_PATTERN "\\." OCTET_PATTERN "\\." OCTET_PATTERN "\\." OCTET_PATTERN "\\s*$"
112+
#undef OCTET_PATTERN
114113
};
115114

116115
std::smatch ipv4_parts;

test/net/unit/ip4_addr.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,15 @@ CASE("Create IP4 addresses from strings")
5252
Addr ipv4_address {extra_whitespace_addr_str};
5353
EXPECT(ipv4_address.str() == "10.0.0.42");
5454

55+
EXPECT_NO_THROW(Addr("202.209.27.78"));
56+
EXPECT_NO_THROW(Addr("212.209.27.78"));
57+
EXPECT_NO_THROW(Addr("222.209.27.78"));
58+
EXPECT_NO_THROW(Addr("232.209.27.78"));
59+
EXPECT_NO_THROW(Addr("242.209.27.78"));
60+
EXPECT_NO_THROW(Addr("255.209.27.78"));
61+
EXPECT_THROWS(Addr("265.209.27.78"));
62+
EXPECT_THROWS(Addr("256.209.27.78"));
63+
5564
EXPECT_THROWS(Addr{"LUL"});
5665
EXPECT_THROWS(Addr{"12310298310298301283"});
5766
EXPECT_THROWS(const Addr invalid{"256.256.256.256"});

0 commit comments

Comments
 (0)