From e122ebabb657021964f2bdd31e683ddfa023fd0c Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 20 Jun 2023 09:38:39 -0700 Subject: encoding/binary: on invalid type return -1 from Size Size is defined as returning -1 if the type is not fixed-size. Before this CL cases like Size((*[]int)(nil)) would crash. Fixes #60892 Change-Id: Iee8e20a0aee24b542b78cb4160c3b2c5a3eb02c2 Reviewed-on: https://go-review.googlesource.com/c/go/+/504575 Auto-Submit: Ian Lance Taylor Run-TryBot: Ian Lance Taylor Reviewed-by: Robert Griesemer TryBot-Result: Gopher Robot Reviewed-by: Bryan Mills --- src/encoding/binary/binary.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/encoding/binary/binary.go') diff --git a/src/encoding/binary/binary.go b/src/encoding/binary/binary.go index 158e3e9d7f..3fb18a7a03 100644 --- a/src/encoding/binary/binary.go +++ b/src/encoding/binary/binary.go @@ -479,7 +479,6 @@ func dataSize(v reflect.Value) int { if s := sizeof(v.Type().Elem()); s >= 0 { return s * v.Len() } - return -1 case reflect.Struct: t := v.Type() @@ -491,8 +490,12 @@ func dataSize(v reflect.Value) int { return size default: - return sizeof(v.Type()) + if v.IsValid() { + return sizeof(v.Type()) + } } + + return -1 } // sizeof returns the size >= 0 of variables for the given type or -1 if the type is not acceptable. -- cgit v1.3