1*1c12ee1eSDan Willemsen// Copyright 2019 The Go Authors. All rights reserved. 2*1c12ee1eSDan Willemsen// Use of this source code is governed by a BSD-style 3*1c12ee1eSDan Willemsen// license that can be found in the LICENSE file. 4*1c12ee1eSDan Willemsen 5*1c12ee1eSDan Willemsenpackage proto_test 6*1c12ee1eSDan Willemsen 7*1c12ee1eSDan Willemsenimport ( 8*1c12ee1eSDan Willemsen "google.golang.org/protobuf/encoding/protowire" 9*1c12ee1eSDan Willemsen "google.golang.org/protobuf/internal/flags" 10*1c12ee1eSDan Willemsen "google.golang.org/protobuf/proto" 11*1c12ee1eSDan Willemsen "google.golang.org/protobuf/testing/protopack" 12*1c12ee1eSDan Willemsen 13*1c12ee1eSDan Willemsen messagesetpb "google.golang.org/protobuf/internal/testprotos/messageset/messagesetpb" 14*1c12ee1eSDan Willemsen msetextpb "google.golang.org/protobuf/internal/testprotos/messageset/msetextpb" 15*1c12ee1eSDan Willemsen) 16*1c12ee1eSDan Willemsen 17*1c12ee1eSDan Willemsenfunc init() { 18*1c12ee1eSDan Willemsen if flags.ProtoLegacy { 19*1c12ee1eSDan Willemsen testValidMessages = append(testValidMessages, messageSetTestProtos...) 20*1c12ee1eSDan Willemsen testInvalidMessages = append(testInvalidMessages, messageSetInvalidTestProtos...) 21*1c12ee1eSDan Willemsen } 22*1c12ee1eSDan Willemsen} 23*1c12ee1eSDan Willemsen 24*1c12ee1eSDan Willemsenvar messageSetTestProtos = []testProto{ 25*1c12ee1eSDan Willemsen { 26*1c12ee1eSDan Willemsen desc: "MessageSet type_id before message content", 27*1c12ee1eSDan Willemsen decodeTo: []proto.Message{func() proto.Message { 28*1c12ee1eSDan Willemsen m := &messagesetpb.MessageSetContainer{MessageSet: &messagesetpb.MessageSet{}} 29*1c12ee1eSDan Willemsen proto.SetExtension(m.MessageSet, msetextpb.E_Ext1_MessageSetExtension, &msetextpb.Ext1{ 30*1c12ee1eSDan Willemsen Ext1Field1: proto.Int32(10), 31*1c12ee1eSDan Willemsen }) 32*1c12ee1eSDan Willemsen return m 33*1c12ee1eSDan Willemsen }()}, 34*1c12ee1eSDan Willemsen wire: protopack.Message{ 35*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 36*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.StartGroupType}, 37*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(1000), 38*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 39*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(10), 40*1c12ee1eSDan Willemsen }), 41*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.EndGroupType}, 42*1c12ee1eSDan Willemsen }), 43*1c12ee1eSDan Willemsen }.Marshal(), 44*1c12ee1eSDan Willemsen }, 45*1c12ee1eSDan Willemsen { 46*1c12ee1eSDan Willemsen desc: "MessageSet type_id after message content", 47*1c12ee1eSDan Willemsen decodeTo: []proto.Message{func() proto.Message { 48*1c12ee1eSDan Willemsen m := &messagesetpb.MessageSetContainer{MessageSet: &messagesetpb.MessageSet{}} 49*1c12ee1eSDan Willemsen proto.SetExtension(m.MessageSet, msetextpb.E_Ext1_MessageSetExtension, &msetextpb.Ext1{ 50*1c12ee1eSDan Willemsen Ext1Field1: proto.Int32(10), 51*1c12ee1eSDan Willemsen }) 52*1c12ee1eSDan Willemsen return m 53*1c12ee1eSDan Willemsen }()}, 54*1c12ee1eSDan Willemsen wire: protopack.Message{ 55*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 56*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.StartGroupType}, 57*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 58*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(10), 59*1c12ee1eSDan Willemsen }), 60*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(1000), 61*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.EndGroupType}, 62*1c12ee1eSDan Willemsen }), 63*1c12ee1eSDan Willemsen }.Marshal(), 64*1c12ee1eSDan Willemsen }, 65*1c12ee1eSDan Willemsen { 66*1c12ee1eSDan Willemsen desc: "MessageSet does not preserve unknown field", 67*1c12ee1eSDan Willemsen decodeTo: []proto.Message{build( 68*1c12ee1eSDan Willemsen &messagesetpb.MessageSet{}, 69*1c12ee1eSDan Willemsen extend(msetextpb.E_Ext1_MessageSetExtension, &msetextpb.Ext1{ 70*1c12ee1eSDan Willemsen Ext1Field1: proto.Int32(10), 71*1c12ee1eSDan Willemsen }), 72*1c12ee1eSDan Willemsen )}, 73*1c12ee1eSDan Willemsen wire: protopack.Message{ 74*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.StartGroupType}, 75*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(1000), 76*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 77*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(10), 78*1c12ee1eSDan Willemsen }), 79*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.EndGroupType}, 80*1c12ee1eSDan Willemsen // Unknown field 81*1c12ee1eSDan Willemsen protopack.Tag{4, protopack.VarintType}, protopack.Varint(30), 82*1c12ee1eSDan Willemsen }.Marshal(), 83*1c12ee1eSDan Willemsen }, 84*1c12ee1eSDan Willemsen { 85*1c12ee1eSDan Willemsen desc: "MessageSet with unknown type_id", 86*1c12ee1eSDan Willemsen decodeTo: []proto.Message{build( 87*1c12ee1eSDan Willemsen &messagesetpb.MessageSet{}, 88*1c12ee1eSDan Willemsen unknown(protopack.Message{ 89*1c12ee1eSDan Willemsen protopack.Tag{999, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 90*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(10), 91*1c12ee1eSDan Willemsen }), 92*1c12ee1eSDan Willemsen }.Marshal()), 93*1c12ee1eSDan Willemsen )}, 94*1c12ee1eSDan Willemsen wire: protopack.Message{ 95*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.StartGroupType}, 96*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(999), 97*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 98*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(10), 99*1c12ee1eSDan Willemsen }), 100*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.EndGroupType}, 101*1c12ee1eSDan Willemsen }.Marshal(), 102*1c12ee1eSDan Willemsen }, 103*1c12ee1eSDan Willemsen { 104*1c12ee1eSDan Willemsen desc: "MessageSet merges repeated message fields in item", 105*1c12ee1eSDan Willemsen decodeTo: []proto.Message{build( 106*1c12ee1eSDan Willemsen &messagesetpb.MessageSet{}, 107*1c12ee1eSDan Willemsen extend(msetextpb.E_Ext1_MessageSetExtension, &msetextpb.Ext1{ 108*1c12ee1eSDan Willemsen Ext1Field1: proto.Int32(10), 109*1c12ee1eSDan Willemsen Ext1Field2: proto.Int32(20), 110*1c12ee1eSDan Willemsen }), 111*1c12ee1eSDan Willemsen )}, 112*1c12ee1eSDan Willemsen wire: protopack.Message{ 113*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.StartGroupType}, 114*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(1000), 115*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 116*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(10), 117*1c12ee1eSDan Willemsen }), 118*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 119*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(20), 120*1c12ee1eSDan Willemsen }), 121*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.EndGroupType}, 122*1c12ee1eSDan Willemsen }.Marshal(), 123*1c12ee1eSDan Willemsen }, 124*1c12ee1eSDan Willemsen { 125*1c12ee1eSDan Willemsen desc: "MessageSet merges message fields in repeated items", 126*1c12ee1eSDan Willemsen decodeTo: []proto.Message{build( 127*1c12ee1eSDan Willemsen &messagesetpb.MessageSet{}, 128*1c12ee1eSDan Willemsen extend(msetextpb.E_Ext1_MessageSetExtension, &msetextpb.Ext1{ 129*1c12ee1eSDan Willemsen Ext1Field1: proto.Int32(10), 130*1c12ee1eSDan Willemsen Ext1Field2: proto.Int32(20), 131*1c12ee1eSDan Willemsen }), 132*1c12ee1eSDan Willemsen extend(msetextpb.E_Ext2_MessageSetExtension, &msetextpb.Ext2{ 133*1c12ee1eSDan Willemsen Ext2Field1: proto.Int32(30), 134*1c12ee1eSDan Willemsen }), 135*1c12ee1eSDan Willemsen )}, 136*1c12ee1eSDan Willemsen wire: protopack.Message{ 137*1c12ee1eSDan Willemsen // Ext1, field1 138*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.StartGroupType}, 139*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(1000), 140*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 141*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(10), 142*1c12ee1eSDan Willemsen }), 143*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.EndGroupType}, 144*1c12ee1eSDan Willemsen // Ext2, field1 145*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.StartGroupType}, 146*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(1001), 147*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 148*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(30), 149*1c12ee1eSDan Willemsen }), 150*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.EndGroupType}, 151*1c12ee1eSDan Willemsen // Ext2, field2 152*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.StartGroupType}, 153*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(1000), 154*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 155*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(20), 156*1c12ee1eSDan Willemsen }), 157*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.EndGroupType}, 158*1c12ee1eSDan Willemsen }.Marshal(), 159*1c12ee1eSDan Willemsen }, 160*1c12ee1eSDan Willemsen { 161*1c12ee1eSDan Willemsen desc: "MessageSet with missing type_id", 162*1c12ee1eSDan Willemsen decodeTo: []proto.Message{build( 163*1c12ee1eSDan Willemsen &messagesetpb.MessageSet{}, 164*1c12ee1eSDan Willemsen )}, 165*1c12ee1eSDan Willemsen wire: protopack.Message{ 166*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.StartGroupType}, 167*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 168*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(10), 169*1c12ee1eSDan Willemsen }), 170*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.EndGroupType}, 171*1c12ee1eSDan Willemsen }.Marshal(), 172*1c12ee1eSDan Willemsen }, 173*1c12ee1eSDan Willemsen { 174*1c12ee1eSDan Willemsen desc: "MessageSet with missing message", 175*1c12ee1eSDan Willemsen decodeTo: []proto.Message{build( 176*1c12ee1eSDan Willemsen &messagesetpb.MessageSet{}, 177*1c12ee1eSDan Willemsen extend(msetextpb.E_Ext1_MessageSetExtension, &msetextpb.Ext1{}), 178*1c12ee1eSDan Willemsen )}, 179*1c12ee1eSDan Willemsen wire: protopack.Message{ 180*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.StartGroupType}, 181*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(1000), 182*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.EndGroupType}, 183*1c12ee1eSDan Willemsen }.Marshal(), 184*1c12ee1eSDan Willemsen }, 185*1c12ee1eSDan Willemsen { 186*1c12ee1eSDan Willemsen desc: "MessageSet with type id out of valid field number range", 187*1c12ee1eSDan Willemsen decodeTo: []proto.Message{func() proto.Message { 188*1c12ee1eSDan Willemsen m := &messagesetpb.MessageSetContainer{MessageSet: &messagesetpb.MessageSet{}} 189*1c12ee1eSDan Willemsen proto.SetExtension(m.MessageSet, msetextpb.E_ExtLargeNumber_MessageSetExtension, &msetextpb.ExtLargeNumber{}) 190*1c12ee1eSDan Willemsen return m 191*1c12ee1eSDan Willemsen }()}, 192*1c12ee1eSDan Willemsen wire: protopack.Message{ 193*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 194*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.StartGroupType}, 195*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(protowire.MaxValidNumber + 1), 196*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), 197*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.EndGroupType}, 198*1c12ee1eSDan Willemsen }), 199*1c12ee1eSDan Willemsen }.Marshal(), 200*1c12ee1eSDan Willemsen }, 201*1c12ee1eSDan Willemsen { 202*1c12ee1eSDan Willemsen desc: "MessageSet with unknown type id out of valid field number range", 203*1c12ee1eSDan Willemsen decodeTo: []proto.Message{func() proto.Message { 204*1c12ee1eSDan Willemsen m := &messagesetpb.MessageSetContainer{MessageSet: &messagesetpb.MessageSet{}} 205*1c12ee1eSDan Willemsen m.MessageSet.ProtoReflect().SetUnknown( 206*1c12ee1eSDan Willemsen protopack.Message{ 207*1c12ee1eSDan Willemsen protopack.Tag{protowire.MaxValidNumber + 2, protopack.BytesType}, protopack.LengthPrefix{}, 208*1c12ee1eSDan Willemsen }.Marshal(), 209*1c12ee1eSDan Willemsen ) 210*1c12ee1eSDan Willemsen return m 211*1c12ee1eSDan Willemsen }()}, 212*1c12ee1eSDan Willemsen wire: protopack.Message{ 213*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 214*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.StartGroupType}, 215*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(protowire.MaxValidNumber + 2), 216*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), 217*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.EndGroupType}, 218*1c12ee1eSDan Willemsen }), 219*1c12ee1eSDan Willemsen }.Marshal(), 220*1c12ee1eSDan Willemsen }, 221*1c12ee1eSDan Willemsen { 222*1c12ee1eSDan Willemsen desc: "MessageSet with unknown field", 223*1c12ee1eSDan Willemsen decodeTo: []proto.Message{func() proto.Message { 224*1c12ee1eSDan Willemsen m := &messagesetpb.MessageSetContainer{MessageSet: &messagesetpb.MessageSet{}} 225*1c12ee1eSDan Willemsen proto.SetExtension(m.MessageSet, msetextpb.E_Ext1_MessageSetExtension, &msetextpb.Ext1{ 226*1c12ee1eSDan Willemsen Ext1Field1: proto.Int32(10), 227*1c12ee1eSDan Willemsen }) 228*1c12ee1eSDan Willemsen return m 229*1c12ee1eSDan Willemsen }()}, 230*1c12ee1eSDan Willemsen wire: protopack.Message{ 231*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 232*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.StartGroupType}, 233*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(1000), 234*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 235*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(10), 236*1c12ee1eSDan Willemsen }), 237*1c12ee1eSDan Willemsen protopack.Tag{4, protopack.VarintType}, protopack.Varint(0), 238*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.EndGroupType}, 239*1c12ee1eSDan Willemsen }), 240*1c12ee1eSDan Willemsen }.Marshal(), 241*1c12ee1eSDan Willemsen }, 242*1c12ee1eSDan Willemsen { 243*1c12ee1eSDan Willemsen desc: "MessageSet with required field set", 244*1c12ee1eSDan Willemsen checkFastInit: true, 245*1c12ee1eSDan Willemsen decodeTo: []proto.Message{func() proto.Message { 246*1c12ee1eSDan Willemsen m := &messagesetpb.MessageSetContainer{MessageSet: &messagesetpb.MessageSet{}} 247*1c12ee1eSDan Willemsen proto.SetExtension(m.MessageSet, msetextpb.E_ExtRequired_MessageSetExtension, &msetextpb.ExtRequired{ 248*1c12ee1eSDan Willemsen RequiredField1: proto.Int32(1), 249*1c12ee1eSDan Willemsen }) 250*1c12ee1eSDan Willemsen return m 251*1c12ee1eSDan Willemsen }()}, 252*1c12ee1eSDan Willemsen wire: protopack.Message{ 253*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 254*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.StartGroupType}, 255*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(1002), 256*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 257*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.VarintType}, protopack.Varint(1), 258*1c12ee1eSDan Willemsen }), 259*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.EndGroupType}, 260*1c12ee1eSDan Willemsen }), 261*1c12ee1eSDan Willemsen }.Marshal(), 262*1c12ee1eSDan Willemsen }, 263*1c12ee1eSDan Willemsen { 264*1c12ee1eSDan Willemsen desc: "MessageSet with required field unset", 265*1c12ee1eSDan Willemsen checkFastInit: true, 266*1c12ee1eSDan Willemsen partial: true, 267*1c12ee1eSDan Willemsen decodeTo: []proto.Message{func() proto.Message { 268*1c12ee1eSDan Willemsen m := &messagesetpb.MessageSetContainer{MessageSet: &messagesetpb.MessageSet{}} 269*1c12ee1eSDan Willemsen proto.SetExtension(m.MessageSet, msetextpb.E_ExtRequired_MessageSetExtension, &msetextpb.ExtRequired{}) 270*1c12ee1eSDan Willemsen return m 271*1c12ee1eSDan Willemsen }()}, 272*1c12ee1eSDan Willemsen wire: protopack.Message{ 273*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 274*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.StartGroupType}, 275*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Varint(1002), 276*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), 277*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.EndGroupType}, 278*1c12ee1eSDan Willemsen }), 279*1c12ee1eSDan Willemsen }.Marshal(), 280*1c12ee1eSDan Willemsen }, 281*1c12ee1eSDan Willemsen} 282*1c12ee1eSDan Willemsen 283*1c12ee1eSDan Willemsenvar messageSetInvalidTestProtos = []testProto{ 284*1c12ee1eSDan Willemsen { 285*1c12ee1eSDan Willemsen desc: "MessageSet with type id 0", 286*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 287*1c12ee1eSDan Willemsen (*messagesetpb.MessageSetContainer)(nil), 288*1c12ee1eSDan Willemsen }, 289*1c12ee1eSDan Willemsen wire: protopack.Message{ 290*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 291*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.StartGroupType}, 292*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Uvarint(0), 293*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), 294*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.EndGroupType}, 295*1c12ee1eSDan Willemsen }), 296*1c12ee1eSDan Willemsen }.Marshal(), 297*1c12ee1eSDan Willemsen }, 298*1c12ee1eSDan Willemsen { 299*1c12ee1eSDan Willemsen desc: "MessageSet with type id overflowing int32", 300*1c12ee1eSDan Willemsen decodeTo: []proto.Message{ 301*1c12ee1eSDan Willemsen (*messagesetpb.MessageSetContainer)(nil), 302*1c12ee1eSDan Willemsen }, 303*1c12ee1eSDan Willemsen wire: protopack.Message{ 304*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{ 305*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.StartGroupType}, 306*1c12ee1eSDan Willemsen protopack.Tag{2, protopack.VarintType}, protopack.Uvarint(0x80000000), 307*1c12ee1eSDan Willemsen protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}), 308*1c12ee1eSDan Willemsen protopack.Tag{1, protopack.EndGroupType}, 309*1c12ee1eSDan Willemsen }), 310*1c12ee1eSDan Willemsen }.Marshal(), 311*1c12ee1eSDan Willemsen }, 312*1c12ee1eSDan Willemsen} 313