Skip to content

Commit fe79779

Browse files
authored
Merge pull request #2557 from spevans/pr_sr_606
SR-606: test_deserialize_allowFragments transacts upon uninitialized memory
2 parents 46435a1 + 2a11714 commit fe79779

File tree

1 file changed

+26
-21
lines changed

1 file changed

+26
-21
lines changed

TestFoundation/TestJSONSerialization.swift

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,7 @@ extension TestJSONSerialization {
104104
("test_deserialize_simpleEscapeSequences_withData", test_deserialize_simpleEscapeSequences_withData),
105105
("test_deserialize_unicodeEscapeSequence_withData", test_deserialize_unicodeEscapeSequence_withData),
106106
("test_deserialize_unicodeSurrogatePairEscapeSequence_withData", test_deserialize_unicodeSurrogatePairEscapeSequence_withData),
107-
// Disabled due to uninitialized memory SR-606
108-
// ("test_deserialize_allowFragments_withData", test_deserialize_allowFragments_withData),
107+
("test_deserialize_allowFragments_withData", test_deserialize_allowFragments_withData),
109108

110109
("test_deserialize_unterminatedObjectString_withData", test_deserialize_unterminatedObjectString_withData),
111110
("test_deserialize_missingObjectKey_withData", test_deserialize_missingObjectKey_withData),
@@ -136,8 +135,7 @@ extension TestJSONSerialization {
136135
("test_deserialize_simpleEscapeSequences_withStream", test_deserialize_simpleEscapeSequences_withStream),
137136
("test_deserialize_unicodeEscapeSequence_withStream", test_deserialize_unicodeEscapeSequence_withStream),
138137
("test_deserialize_unicodeSurrogatePairEscapeSequence_withStream", test_deserialize_unicodeSurrogatePairEscapeSequence_withStream),
139-
// Disabled due to uninitialized memory SR-606
140-
// ("test_deserialize_allowFragments_withStream", test_deserialize_allowFragments_withStream),
138+
("test_deserialize_allowFragments_withStream", test_deserialize_allowFragments_withStream),
141139

142140
("test_deserialize_unterminatedObjectString_withStream", test_deserialize_unterminatedObjectString_withStream),
143141
("test_deserialize_missingObjectKey_withStream", test_deserialize_missingObjectKey_withStream),
@@ -207,10 +205,9 @@ extension TestJSONSerialization {
207205
deserialize_unicodeSurrogatePairEscapeSequence(objectType: .data)
208206
}
209207

210-
// Disabled due to uninitialized memory SR-606
211-
// func test_deserialize_allowFragments_withData() {
212-
// deserialize_allowFragments(objectType: .data)
213-
// }
208+
func test_deserialize_allowFragments_withData() {
209+
deserialize_allowFragments(objectType: .data)
210+
}
214211

215212
func test_deserialize_unterminatedObjectString_withData() {
216213
deserialize_unterminatedObjectString(objectType: .data)
@@ -305,10 +302,9 @@ extension TestJSONSerialization {
305302
deserialize_unicodeSurrogatePairEscapeSequence(objectType: .stream)
306303
}
307304

308-
// Disabled due to uninitialized memory SR-606
309-
// func test_deserialize_allowFragments_withStream() {
310-
// deserialize_allowFragments(objectType: .stream)
311-
// }
305+
func test_deserialize_allowFragments_withStream() {
306+
deserialize_allowFragments(objectType: .stream)
307+
}
312308

313309
func test_deserialize_unterminatedObjectString_withStream() {
314310
deserialize_unterminatedObjectString(objectType: .stream)
@@ -613,17 +609,26 @@ extension TestJSONSerialization {
613609
func deserialize_allowFragments(objectType: ObjectType) {
614610
let subject = "3"
615611

616-
do {
617-
for encoding in supportedEncodings {
618-
guard let data = subject.data(using: encoding) else {
619-
XCTFail("Unable to convert string to data")
620-
return
621-
}
622-
let result = try getjsonObjectResult(data, objectType) as? Int
612+
for encoding in supportedEncodings {
613+
guard let data = subject.data(using: encoding) else {
614+
XCTFail("Unable to convert string to data using encoding \(encoding)")
615+
continue
616+
}
617+
618+
// Check failure to decode without .allowFragments
619+
XCTAssertThrowsError(try getjsonObjectResult(data, objectType)) {
620+
let nserror = ($0 as! NSError)
621+
XCTAssertEqual(nserror.domain, NSCocoaErrorDomain)
622+
let code = CocoaError(_nsError: nserror).code
623+
XCTAssertEqual(code, .propertyListReadCorrupt)
624+
}
625+
626+
do {
627+
let result = try getjsonObjectResult(data, objectType, options: .allowFragments) as? Int
623628
XCTAssertEqual(result, 3)
629+
} catch {
630+
XCTFail("Unexpected error: \(error) using encoding \(encoding)")
624631
}
625-
} catch {
626-
XCTFail("Unexpected error: \(error)")
627632
}
628633
}
629634

0 commit comments

Comments
 (0)