Address review comments.

This commit is contained in:
Jon Skeet 2015-08-08 07:24:28 +01:00
parent 5bdc57292f
commit 6e16037c99
2 changed files with 24 additions and 2 deletions

View File

@ -629,5 +629,27 @@ namespace Google.Protobuf
var data = new byte[] { 130, 3, 1 };
Assert.Throws<InvalidProtocolBufferException>(() => TestAllTypes.Parser.ParseFrom(data));
}
/// <summary>
/// Demonstrates current behaviour with an extraneous end group tag - see issue 688
/// for details; we may want to change this.
/// </summary>
[Test]
public void ExtraEndGroupSkipped()
{
var message = SampleMessages.CreateFullTestAllTypes();
var stream = new MemoryStream();
var output = new CodedOutputStream(stream);
output.WriteTag(100, WireFormat.WireType.EndGroup);
output.WriteTag(TestAllTypes.SingleFixed32FieldNumber, WireFormat.WireType.Fixed32);
output.WriteFixed32(123);
output.Flush();
stream.Position = 0;
var parsed = TestAllTypes.Parser.ParseFrom(stream);
Assert.AreEqual(new TestAllTypes { SingleFixed32 = 123 }, parsed);
}
}
}

View File

@ -346,7 +346,7 @@ namespace Google.Protobuf
switch (WireFormat.GetTagWireType(lastTag))
{
case WireFormat.WireType.StartGroup:
ConsumeGroup();
SkipGroup();
break;
case WireFormat.WireType.EndGroup:
// Just ignore; there's no data following the tag.
@ -367,7 +367,7 @@ namespace Google.Protobuf
}
}
private void ConsumeGroup()
private void SkipGroup()
{
// Note: Currently we expect this to be the way that groups are read. We could put the recursion
// depth changes into the ReadTag method instead, potentially...