Skip to content

SR-606: test_deserialize_allowFragments transacts upon uninitialized memory #2557

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Nov 13, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 26 additions & 21 deletions TestFoundation/TestJSONSerialization.swift
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,7 @@ extension TestJSONSerialization {
("test_deserialize_simpleEscapeSequences_withData", test_deserialize_simpleEscapeSequences_withData),
("test_deserialize_unicodeEscapeSequence_withData", test_deserialize_unicodeEscapeSequence_withData),
("test_deserialize_unicodeSurrogatePairEscapeSequence_withData", test_deserialize_unicodeSurrogatePairEscapeSequence_withData),
// Disabled due to uninitialized memory SR-606
// ("test_deserialize_allowFragments_withData", test_deserialize_allowFragments_withData),
("test_deserialize_allowFragments_withData", test_deserialize_allowFragments_withData),

("test_deserialize_unterminatedObjectString_withData", test_deserialize_unterminatedObjectString_withData),
("test_deserialize_missingObjectKey_withData", test_deserialize_missingObjectKey_withData),
Expand Down Expand Up @@ -136,8 +135,7 @@ extension TestJSONSerialization {
("test_deserialize_simpleEscapeSequences_withStream", test_deserialize_simpleEscapeSequences_withStream),
("test_deserialize_unicodeEscapeSequence_withStream", test_deserialize_unicodeEscapeSequence_withStream),
("test_deserialize_unicodeSurrogatePairEscapeSequence_withStream", test_deserialize_unicodeSurrogatePairEscapeSequence_withStream),
// Disabled due to uninitialized memory SR-606
// ("test_deserialize_allowFragments_withStream", test_deserialize_allowFragments_withStream),
("test_deserialize_allowFragments_withStream", test_deserialize_allowFragments_withStream),

("test_deserialize_unterminatedObjectString_withStream", test_deserialize_unterminatedObjectString_withStream),
("test_deserialize_missingObjectKey_withStream", test_deserialize_missingObjectKey_withStream),
Expand Down Expand Up @@ -207,10 +205,9 @@ extension TestJSONSerialization {
deserialize_unicodeSurrogatePairEscapeSequence(objectType: .data)
}

// Disabled due to uninitialized memory SR-606
// func test_deserialize_allowFragments_withData() {
// deserialize_allowFragments(objectType: .data)
// }
func test_deserialize_allowFragments_withData() {
deserialize_allowFragments(objectType: .data)
}

func test_deserialize_unterminatedObjectString_withData() {
deserialize_unterminatedObjectString(objectType: .data)
Expand Down Expand Up @@ -305,10 +302,9 @@ extension TestJSONSerialization {
deserialize_unicodeSurrogatePairEscapeSequence(objectType: .stream)
}

// Disabled due to uninitialized memory SR-606
// func test_deserialize_allowFragments_withStream() {
// deserialize_allowFragments(objectType: .stream)
// }
func test_deserialize_allowFragments_withStream() {
deserialize_allowFragments(objectType: .stream)
}

func test_deserialize_unterminatedObjectString_withStream() {
deserialize_unterminatedObjectString(objectType: .stream)
Expand Down Expand Up @@ -613,17 +609,26 @@ extension TestJSONSerialization {
func deserialize_allowFragments(objectType: ObjectType) {
let subject = "3"

do {
for encoding in supportedEncodings {
guard let data = subject.data(using: encoding) else {
XCTFail("Unable to convert string to data")
return
}
let result = try getjsonObjectResult(data, objectType) as? Int
for encoding in supportedEncodings {
guard let data = subject.data(using: encoding) else {
XCTFail("Unable to convert string to data using encoding \(encoding)")
continue
}

// Check failure to decode without .allowFragments
XCTAssertThrowsError(try getjsonObjectResult(data, objectType)) {
let nserror = ($0 as! NSError)
XCTAssertEqual(nserror.domain, NSCocoaErrorDomain)
let code = CocoaError(_nsError: nserror).code
XCTAssertEqual(code, .propertyListReadCorrupt)
}

do {
let result = try getjsonObjectResult(data, objectType, options: .allowFragments) as? Int
XCTAssertEqual(result, 3)
} catch {
XCTFail("Unexpected error: \(error) using encoding \(encoding)")
}
} catch {
XCTFail("Unexpected error: \(error)")
}
}

Expand Down