NSURL: Dont leak the result of dataRepresentation (#1170)
diff --git a/Foundation/NSURL.swift b/Foundation/NSURL.swift
index 9f06158..06a5217 100644
--- a/Foundation/NSURL.swift
+++ b/Foundation/NSURL.swift
@@ -405,7 +405,7 @@
let buffer = malloc(bytesNeeded)!.bindMemory(to: UInt8.self, capacity: bytesNeeded)
let bytesFilled = CFURLGetBytes(_cfObject, buffer, bytesNeeded)
if bytesFilled == bytesNeeded {
- return Data(bytesNoCopy: buffer, count: bytesNeeded, deallocator: .none)
+ return Data(bytesNoCopy: buffer, count: bytesNeeded, deallocator: .free)
} else {
fatalError()
}
diff --git a/TestFoundation/TestURL.swift b/TestFoundation/TestURL.swift
index b0977b1..1ce0bf9 100644
--- a/TestFoundation/TestURL.swift
+++ b/TestFoundation/TestURL.swift
@@ -64,6 +64,7 @@
("test_reachable", test_reachable),
("test_copy", test_copy),
("test_itemNSCoding", test_itemNSCoding),
+ ("test_dataRepresentation", test_dataRepresentation),
]
}
@@ -491,6 +492,13 @@
let queryItemB = NSKeyedUnarchiver.unarchiveObject(with: NSKeyedArchiver.archivedData(withRootObject: queryItemA)) as! NSURLQueryItem
XCTAssertEqual(queryItemA, queryItemB, "Archived then unarchived query item must be equal.")
}
+
+ func test_dataRepresentation() {
+ let url = NSURL(fileURLWithPath: "/tmp/foo")
+ let url2 = NSURL(dataRepresentation: url.dataRepresentation,
+ relativeTo: nil)
+ XCTAssertEqual(url, url2)
+ }
}
class TestURLComponents : XCTestCase {