Skip to content

Commit

Permalink
Merge pull request #1513 from thomasvl/message_set_fix_1_x
Browse files Browse the repository at this point in the history
Fix ordering bug in MessageSet parsing (1.x branch)
  • Loading branch information
tbkka authored Nov 29, 2023
2 parents 07f7f26 + 1ef4a4a commit faaa27f
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 1 deletion.
2 changes: 1 addition & 1 deletion Sources/SwiftProtobuf/BinaryDecoder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1213,7 +1213,7 @@ internal struct BinaryDecoder: Decoder {
extDecoder.fieldWireFormat = .lengthDelimited
try extDecoder.decodeExtensionField(values: &values,
messageType: messageType,
fieldNumber: fieldNumber,
fieldNumber: ext.fieldNumber,
messageExtension: ext)
wasDecoded = extDecoder.consumed
}
Expand Down
38 changes: 38 additions & 0 deletions Tests/SwiftProtobufTests/Test_MessageSet.swift
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,44 @@ class Test_MessageSet: XCTestCase {
"}\n"
)

func testParseOrder1() throws {
let serialized = Data([11,
16, 176, 166, 94, // Extension ID
26, 2, 120, 123, // Payload message
12])

let msg: Proto2WireformatUnittest_TestMessageSet
do {
msg = try Proto2WireformatUnittest_TestMessageSet(
serializedData: serialized,
extensions: ProtobufUnittest_UnittestMset_Extensions)
} catch let e {
XCTFail("Failed to parse: \(e)")
return
}
XCTAssertEqual(
msg.ProtobufUnittest_TestMessageSetExtension1_messageSetExtension.i, 123)
}

func testParseOrder2() throws {
let serialized = Data([11,
26, 2, 120, 123, // Payload message
16, 176, 166, 94, // Extension ID
12])

let msg: Proto2WireformatUnittest_TestMessageSet
do {
msg = try Proto2WireformatUnittest_TestMessageSet(
serializedData: serialized,
extensions: ProtobufUnittest_UnittestMset_Extensions)
} catch let e {
XCTFail("Failed to parse: \(e)")
return
}
XCTAssertEqual(
msg.ProtobufUnittest_TestMessageSetExtension1_messageSetExtension.i, 123)
}

// text_format_unittest.cc: TEST_F(TextFormatMessageSetTest, Serialize)
func testTextFormat_Serialize() {
let msg = ProtobufUnittest_TestMessageSetContainer.with {
Expand Down

0 comments on commit faaa27f

Please sign in to comment.