|
|
|
@ -469,6 +469,52 @@ namespace Google.Protobuf |
|
|
|
|
Assert.AreEqual("field 3", input.ReadString()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void SkipGroup_WrongEndGroupTag() |
|
|
|
|
{ |
|
|
|
|
// Create an output stream with: |
|
|
|
|
// Field 1: string "field 1" |
|
|
|
|
// Start group 2 |
|
|
|
|
// Field 3: fixed int32 |
|
|
|
|
// End group 4 (should give an error) |
|
|
|
|
var stream = new MemoryStream(); |
|
|
|
|
var output = new CodedOutputStream(stream); |
|
|
|
|
output.WriteTag(1, WireFormat.WireType.LengthDelimited); |
|
|
|
|
output.WriteString("field 1"); |
|
|
|
|
|
|
|
|
|
// The outer group... |
|
|
|
|
output.WriteTag(2, WireFormat.WireType.StartGroup); |
|
|
|
|
output.WriteTag(3, WireFormat.WireType.Fixed32); |
|
|
|
|
output.WriteFixed32(100); |
|
|
|
|
output.WriteTag(4, WireFormat.WireType.EndGroup); |
|
|
|
|
output.Flush(); |
|
|
|
|
stream.Position = 0; |
|
|
|
|
|
|
|
|
|
// Now act like a generated client |
|
|
|
|
var input = new CodedInputStream(stream); |
|
|
|
|
Assert.AreEqual(WireFormat.MakeTag(1, WireFormat.WireType.LengthDelimited), input.ReadTag()); |
|
|
|
|
Assert.AreEqual("field 1", input.ReadString()); |
|
|
|
|
Assert.AreEqual(WireFormat.MakeTag(2, WireFormat.WireType.StartGroup), input.ReadTag()); |
|
|
|
|
Assert.Throws<InvalidProtocolBufferException>(input.SkipLastField); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void RogueEndGroupTag() |
|
|
|
|
{ |
|
|
|
|
// If we have an end-group tag without a leading start-group tag, generated |
|
|
|
|
// code will just call SkipLastField... so that should fail. |
|
|
|
|
|
|
|
|
|
var stream = new MemoryStream(); |
|
|
|
|
var output = new CodedOutputStream(stream); |
|
|
|
|
output.WriteTag(1, WireFormat.WireType.EndGroup); |
|
|
|
|
output.Flush(); |
|
|
|
|
stream.Position = 0; |
|
|
|
|
|
|
|
|
|
var input = new CodedInputStream(stream); |
|
|
|
|
Assert.AreEqual(WireFormat.MakeTag(1, WireFormat.WireType.EndGroup), input.ReadTag()); |
|
|
|
|
Assert.Throws<InvalidProtocolBufferException>(input.SkipLastField); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void EndOfStreamReachedWhileSkippingGroup() |
|
|
|
|
{ |
|
|
|
@ -484,7 +530,7 @@ namespace Google.Protobuf |
|
|
|
|
// Now act like a generated client |
|
|
|
|
var input = new CodedInputStream(stream); |
|
|
|
|
input.ReadTag(); |
|
|
|
|
Assert.Throws<InvalidProtocolBufferException>(() => input.SkipLastField()); |
|
|
|
|
Assert.Throws<InvalidProtocolBufferException>(input.SkipLastField); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
@ -506,7 +552,7 @@ namespace Google.Protobuf |
|
|
|
|
// Now act like a generated client |
|
|
|
|
var input = new CodedInputStream(stream); |
|
|
|
|
Assert.AreEqual(WireFormat.MakeTag(1, WireFormat.WireType.StartGroup), input.ReadTag()); |
|
|
|
|
Assert.Throws<InvalidProtocolBufferException>(() => input.SkipLastField()); |
|
|
|
|
Assert.Throws<InvalidProtocolBufferException>(input.SkipLastField); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|