summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/tanya/net/ip.d15
1 files changed, 14 insertions, 1 deletions
diff --git a/source/tanya/net/ip.d b/source/tanya/net/ip.d
index 5c375ba..0785aaf 100644
--- a/source/tanya/net/ip.d
+++ b/source/tanya/net/ip.d
@@ -290,6 +290,10 @@ if (isInputRange!R && isSomeChar!(ElementType!R))
for (; shift != cond; shift += Address4.step, range.popFront())
{
+ if (range.empty || range.front == '.')
+ {
+ return typeof(return)();
+ }
result.address |= readIntegral!ubyte(range) << shift;
if (range.empty || range.front != '.')
{
@@ -297,14 +301,23 @@ if (isInputRange!R && isSomeChar!(ElementType!R))
}
}
+ if (range.empty || range.front == '.')
+ {
+ return typeof(return)();
+ }
result.address |= readIntegral!ubyte(range) << shift;
return range.empty ? typeof(return)(result) : typeof(return)();
}
-///
+// Rejects malformed addresses
@nogc nothrow pure @safe unittest
{
assert(address4("256.0.0.1").isNothing);
+ assert(address4(".0.0.1").isNothing);
+ assert(address4("0..0.1").isNothing);
+ assert(address4("0.0.0.").isNothing);
+ assert(address4("0.0.").isNothing);
+ assert(address4("").isNothing);
}
/**