diff --git a/Source/NSData.m b/Source/NSData.m index ec392da64..f4fe3105e 100644 --- a/Source/NSData.m +++ b/Source/NSData.m @@ -804,6 +804,13 @@ failure: } } length = dst - result; + + if (length == 0) + { + NSZoneFree(zone, result); + return [self initWithBytesNoCopy: 0 length: 0 freeWhenDone: YES]; + } + if (options & NSDataBase64DecodingIgnoreUnknownCharacters) { /* If the decoded length is a lot shorter than expected (because we diff --git a/Tests/base/NSData/base64.m b/Tests/base/NSData/base64.m index 46524cee7..f39813fa9 100644 --- a/Tests/base/NSData/base64.m +++ b/Tests/base/NSData/base64.m @@ -127,6 +127,12 @@ int main() PASS_EQUAL(data, ref, "base64 decoding Yml0bWFya2V0cyB1c2VyIGluZGVudGl0eQ==") [data release]; + data = [[NSData alloc] initWithBase64EncodedString: @"\n" + options: NSDataBase64DecodingIgnoreUnknownCharacters]; + ref = [NSData dataWithBytes: "" length: 0]; + PASS_EQUAL(data, ref, "base64 decoding empty string") + [data release]; + [arp release]; arp = nil; return 0; }