File tree Expand file tree Collapse file tree 2 files changed +20
-12
lines changed Expand file tree Collapse file tree 2 files changed +20
-12
lines changed Original file line number Diff line number Diff line change @@ -283,20 +283,23 @@ func writeStruct(w *textWriter, sv reflect.Value) error {
283283 if err := w .WriteByte ('\n' ); err != nil {
284284 return err
285285 }
286- // value
287- if _ , err := w .WriteString ("value:" ); err != nil {
288- return err
289- }
290- if ! w .compact {
291- if err := w .WriteByte (' ' ); err != nil {
286+ // nil values aren't legal, but we can avoid panicking because of them.
287+ if val .Kind () != reflect .Ptr || ! val .IsNil () {
288+ // value
289+ if _ , err := w .WriteString ("value:" ); err != nil {
290+ return err
291+ }
292+ if ! w .compact {
293+ if err := w .WriteByte (' ' ); err != nil {
294+ return err
295+ }
296+ }
297+ if err := writeAny (w , val , props .mvalprop ); err != nil {
298+ return err
299+ }
300+ if err := w .WriteByte ('\n' ); err != nil {
292301 return err
293302 }
294- }
295- if err := writeAny (w , val , props .mvalprop ); err != nil {
296- return err
297- }
298- if err := w .WriteByte ('\n' ); err != nil {
299- return err
300303 }
301304 // close struct
302305 w .unindent ()
Original file line number Diff line number Diff line change @@ -426,6 +426,11 @@ func TestProto3Text(t *testing.T) {
426426 & pb.MessageWithMap {NameMapping : map [int32 ]string {1234 : "Feist" }},
427427 `name_mapping:<key:1234 value:"Feist" >` ,
428428 },
429+ // map with nil value; not well-defined, but we shouldn't crash
430+ {
431+ & pb.MessageWithMap {MsgMapping : map [int64 ]* pb.FloatingPoint {7 : nil }},
432+ `msg_mapping:<key:7 >` ,
433+ },
429434 }
430435 for _ , test := range tests {
431436 got := strings .TrimSpace (test .m .String ())
You can’t perform that action at this time.
0 commit comments