diff --git a/protosanitizer/protosanitizer.go b/protosanitizer/protosanitizer.go index 2b63f249..253116de 100644 --- a/protosanitizer/protosanitizer.go +++ b/protosanitizer/protosanitizer.go @@ -68,7 +68,11 @@ func stripSingleValue(field protoreflect.FieldDescriptor, v protoreflect.Value) case protoreflect.MessageKind: return stripMessage(v.Message()) case protoreflect.EnumKind: - return field.Enum().Values().ByNumber(v.Enum()).Name() + desc := field.Enum().Values().ByNumber(v.Enum()) + if desc == nil { + return v.Enum() + } + return desc.Name() default: return v.Interface() } diff --git a/protosanitizer/protosanitizer_test.go b/protosanitizer/protosanitizer_test.go index 9702fd4b..a8572a23 100644 --- a/protosanitizer/protosanitizer_test.go +++ b/protosanitizer/protosanitizer_test.go @@ -148,6 +148,14 @@ func TestStripSecrets(t *testing.T) { {createVolumeFuture, `{"capacity_range":{"required_bytes":1024},"maybe_secret_map":{"1":{"array_secret":"***stripped***"},"2":{"array_secret":"***stripped***"}},"name":"foo","new_secret_int":"***stripped***","seecreets":"***stripped***","volume_capabilities":[{"array_secret":"***stripped***","mount":{"fs_type":"ext4"}},{"array_secret":"***stripped***"}],"volume_content_source":{"nested_secret_field":"***stripped***","volume":{"oneof_secret_field":"***stripped***","volume_id":"abc"}}}`, }, + {&csi.CreateVolumeRequest{ + VolumeCapabilities: []*csi.VolumeCapability{{ + AccessMode: &csi.VolumeCapability_AccessMode{ + // Test for unknown enum value + Mode: csi.VolumeCapability_AccessMode_Mode(12345), + }, + }}, + }, `{"volume_capabilities":[{"access_mode":{"mode":12345}}]}`}, } // Message from revised spec as received by a sidecar based on the current spec.