From aed5f2e44a603a8227b232a71d077f351e2bac0f Mon Sep 17 00:00:00 2001 From: Richard Schneider Date: Thu, 29 Nov 2018 15:08:40 +1300 Subject: [PATCH] fix(MultiAddress): allow empty MultiAddress, fixes #69 BREAKING CHANGE MultiAddress(byte) and MultiAddress(string) do not throw on empty input. They simply create an empty Protocols. --- src/MultiAddress.cs | 5 ++++- test/MultiAddressTest.cs | 18 ++++-------------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/MultiAddress.cs b/src/MultiAddress.cs index 1e258a3..92666ea 100644 --- a/src/MultiAddress.cs +++ b/src/MultiAddress.cs @@ -51,7 +51,7 @@ public MultiAddress() public MultiAddress(string s) : this() { if (string.IsNullOrWhiteSpace(s)) - throw new ArgumentNullException("s"); + return; Read(new StringReader(s)); } @@ -104,6 +104,9 @@ public MultiAddress Clone() public MultiAddress(byte[] buffer) : this() { + if (buffer == null || buffer.Length == 0) + return; + Read(new MemoryStream(buffer, false)); } diff --git a/test/MultiAddressTest.cs b/test/MultiAddressTest.cs index dda28cf..f2a090a 100644 --- a/test/MultiAddressTest.cs +++ b/test/MultiAddressTest.cs @@ -27,9 +27,9 @@ public void Parsing() Assert.AreEqual("ipfs", a.Protocols[2].Name); Assert.AreEqual("QmVcSqVEsvm5RR9mBLjwpb2XjFVn5bPdPL69mL8PH45pPC", a.Protocols[2].Value); - ExceptionAssert.Throws(() => new MultiAddress((string)null)); - ExceptionAssert.Throws(() => new MultiAddress("")); - ExceptionAssert.Throws(() => new MultiAddress(" ")); + Assert.AreEqual(0, new MultiAddress((string)null).Protocols.Count); + Assert.AreEqual(0, new MultiAddress("").Protocols.Count); + Assert.AreEqual(0, new MultiAddress(" ").Protocols.Count); } [TestMethod] @@ -189,18 +189,10 @@ public void Reading_Invalid_Code() ExceptionAssert.Throws(() => new MultiAddress(new byte[] { 0x7F })); } - [TestMethod] - public void Reading_Empty() - { - ExceptionAssert.Throws(() => new MultiAddress(new byte[0])); - } [TestMethod] public void Reading_Invalid_Text() { - ExceptionAssert.Throws(() => new MultiAddress((string)null)); - ExceptionAssert.Throws(() => new MultiAddress("")); - ExceptionAssert.Throws(() => new MultiAddress(" ")); ExceptionAssert.Throws(() => new MultiAddress("tcp/80")); } @@ -312,8 +304,6 @@ public void Ipv6ScopeId_Ignored() public void TryCreate_FromString() { Assert.IsNotNull(MultiAddress.TryCreate("/ip4/1.2.3.4/tcp/80")); - Assert.IsNull(MultiAddress.TryCreate((string)null)); - Assert.IsNull(MultiAddress.TryCreate(" ")); Assert.IsNull(MultiAddress.TryCreate("/tcp/alpha")); // bad port Assert.IsNull(MultiAddress.TryCreate("/foobar")); // bad protocol } @@ -325,7 +315,7 @@ public void TryCreate_FromBytes() var good1 = MultiAddress.TryCreate(good.ToArray()); Assert.AreEqual(good, good1); - Assert.IsNull(MultiAddress.TryCreate(new byte[0])); + Assert.IsNull(MultiAddress.TryCreate(new byte[] { 0x7f })); } [TestMethod]