From 6da3170a953b38d2e454a3035ebc24ed1cd4803a Mon Sep 17 00:00:00 2001 From: csharptest Date: Sat, 4 Jun 2011 12:52:57 -0500 Subject: Packed and Unpacked parsing allow for all repeated, per 2.3 --- src/ProtocolBuffers/UnknownFieldSet.cs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'src/ProtocolBuffers/UnknownFieldSet.cs') diff --git a/src/ProtocolBuffers/UnknownFieldSet.cs b/src/ProtocolBuffers/UnknownFieldSet.cs index 13a29581..70910cbf 100644 --- a/src/ProtocolBuffers/UnknownFieldSet.cs +++ b/src/ProtocolBuffers/UnknownFieldSet.cs @@ -666,10 +666,25 @@ namespace Google.ProtocolBuffers } // Unknown field or wrong wire type. Skip. - if (field == null || wireType != WireFormat.GetWireType(field)) + if (field == null) { return MergeFieldFrom(tag, input); } + if (wireType != WireFormat.GetWireType(field)) + { + WireFormat.WireType expectedType = WireFormat.GetWireType(field.FieldType); + if (wireType == expectedType) + { + //Allowed as of 2.3, this is unpacked data for a packed array + } + else if (field.IsRepeated && wireType == WireFormat.WireType.LengthDelimited && + (expectedType == WireFormat.WireType.Varint || expectedType == WireFormat.WireType.Fixed32 || expectedType == WireFormat.WireType.Fixed64)) + { + //Allowed as of 2.3, this is packed data for an unpacked array + } + else + return MergeFieldFrom(tag, input); + } switch (field.FieldType) { -- cgit v1.2.3