From 263c8cc97aaa050121b68cf743d6dd6d93908d05 Mon Sep 17 00:00:00 2001 From: Reda Laanait Date: Tue, 18 Feb 2025 11:29:12 +0100 Subject: [PATCH 1/2] fix: convertible to string field data --- scan.go | 16 ++++++++++++++-- scan_test.go | 17 +++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/scan.go b/scan.go index 66c7bb7..b7f2fc5 100644 --- a/scan.go +++ b/scan.go @@ -280,8 +280,17 @@ func (s sensitiveStruct) Replace(fn ReplaceFunc) error { if err != nil { return err } + if newVal != val { - elem.SetString(newVal) + switch ssField.sf.Type.Kind() { + case reflect.String: + elem.SetString(newVal) + default: + vv := reflect.ValueOf(newVal) + if vv.IsValid() && vv.Type().ConvertibleTo(elem.Type()) { + elem.Set(vv.Convert(elem.Type())) + } + } } continue } @@ -414,7 +423,10 @@ func scanStructTypeWithContext(c sensitiveStructContext, rt reflect.Type) (sensi tt = tt.Elem() } if tt.Kind() != reflect.String { - continue + if !field.Type.ConvertibleTo(stringType) { + // return sensitiveStructType{}, ErrUnsupportedFieldType + continue + } } sensitiveFields = append(sensitiveFields, ssField) diff --git a/scan_test.go b/scan_test.go index 3eafe76..de2c6a3 100644 --- a/scan_test.go +++ b/scan_test.go @@ -68,6 +68,23 @@ func TestScan(t *testing.T) { }, ok: true, }, + func() tc { + type T struct { + ID string `sensitive:"subjectID"` + Secret []byte `sensitive:"data"` + } + return tc{ + val: &T{ + ID: "abc", + Secret: []byte("company name"), + }, + want: &T{ + ID: "abc", + Secret: []byte(""), + }, + ok: true, + } + }(), func() tc { type T struct { Profile `sensitive:"dive"` From f0ea24fc1a34213322a2ebd554df3889f8da5c79 Mon Sep 17 00:00:00 2001 From: Reda Laanait Date: Tue, 18 Feb 2025 11:32:52 +0100 Subject: [PATCH 2/2] fix: convertible to string field data --- scan.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/scan.go b/scan.go index b7f2fc5..d2d49fe 100644 --- a/scan.go +++ b/scan.go @@ -422,11 +422,8 @@ func scanStructTypeWithContext(c sensitiveStructContext, rt reflect.Type) (sensi if tt.Kind() == reflect.Ptr { tt = tt.Elem() } - if tt.Kind() != reflect.String { - if !field.Type.ConvertibleTo(stringType) { - // return sensitiveStructType{}, ErrUnsupportedFieldType - continue - } + if tt.Kind() != reflect.String && !field.Type.ConvertibleTo(stringType) { + continue } sensitiveFields = append(sensitiveFields, ssField)