diff --git a/go/enum/parser.go b/go/enum/parser.go index 617d22b3..e5dea683 100644 --- a/go/enum/parser.go +++ b/go/enum/parser.go @@ -17,6 +17,9 @@ func GetStringValue[E protoreflect.Enum](e E) (*string, error) { return nil, fmt.Errorf("given enum is a nil pointer") } } + if e.Descriptor().Values().Len() <= int(e.Number()) { + return nil, fmt.Errorf("given enum number:%d is out of range", e.Number()) + } value := e.Descriptor().Values().Get(int(e.Number())) // Retrieve custom options diff --git a/go/enum/parser_test.go b/go/enum/parser_test.go index 4789a9f5..c25ae94e 100644 --- a/go/enum/parser_test.go +++ b/go/enum/parser_test.go @@ -50,4 +50,10 @@ func TestGetStringValue(t *testing.T) { require.NoError(t, err) require.NotNil(t, got) require.Equal(t, "ext3", *got) + + var invalid apiv2.Format = 42 + got, err = GetStringValue(invalid) + require.Error(t, err) + require.EqualError(t, err, "given enum number:42 is out of range") + require.Nil(t, got) }