Skip to content

Commit 2d21059

Browse files
committed
Fix an over-release in StdlibUnittest
Fixes rdar://51245681
1 parent 1e171af commit 2d21059

File tree

3 files changed

+30
-15
lines changed

3 files changed

+30
-15
lines changed

stdlib/private/StdlibUnittest/GetOSVersion.mm

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,21 @@
1818
SWIFT_CC(swift) SWIFT_RUNTIME_LIBRARY_VISIBILITY extern "C"
1919
const char *
2020
getSystemVersionPlistProperty(const char *PropertyName) {
21-
// This function is implemented in Objective-C because Swift does not support
22-
// failing initializers.
23-
if (!PropertyName)
24-
return nullptr;
21+
@autoreleasepool {
22+
// This function is implemented in Objective-C because Swift does not support
23+
// failing initializers.
24+
if (!PropertyName)
25+
return nullptr;
2526

26-
NSDictionary *SystemVersion =
27-
[NSDictionary dictionaryWithContentsOfFile:
28-
@"/System/Library/CoreServices/SystemVersion.plist"];
29-
if (!SystemVersion)
30-
return nullptr;
31-
NSString *PropertyNameString = [NSString stringWithUTF8String:PropertyName];
32-
const char *Result = strdup([SystemVersion[PropertyNameString] UTF8String]);
33-
[PropertyNameString release];
34-
[SystemVersion release];
35-
return Result;
27+
NSDictionary *SystemVersion =
28+
[NSDictionary dictionaryWithContentsOfFile:
29+
@"/System/Library/CoreServices/SystemVersion.plist"];
30+
if (!SystemVersion)
31+
return nullptr;
32+
NSString *PropertyNameString = [NSString stringWithUTF8String:PropertyName];
33+
const char *Result = strdup([SystemVersion[PropertyNameString] UTF8String]);
34+
return Result;
35+
}
3636
}
3737
#endif
3838

stdlib/private/StdlibUnittest/StdlibUnittest.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1718,7 +1718,9 @@ func _getSystemVersionPlistPropertyImpl(
17181718

17191719
func _getSystemVersionPlistProperty(_ propertyName: String) -> String? {
17201720
let cs = _getSystemVersionPlistPropertyImpl(propertyName)
1721-
return cs.map(String.init(cString:))
1721+
let str = cs.map(String.init(cString:))
1722+
free(UnsafeMutableRawPointer(mutating: cs))
1723+
return str
17221724
}
17231725
#endif
17241726

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// RUN: %target-run-simple-swift
2+
// REQUIRES: executable_test
3+
4+
import Foundation
5+
import StdlibUnittest
6+
7+
var Suite = TestSuite("Overrelease")
8+
9+
Suite.test("doesntfail").xfail(.never).code { }
10+
11+
autoreleasepool {
12+
runAllTests()
13+
}

0 commit comments

Comments
 (0)