Compare commits

...

4 Commits

Author SHA1 Message Date
Pratham Gadkari
ced7894282
Merge 513a86e17fa3ffed325c7f4f41fa3a919ce32afd into e88fc8927a52b74f55bec0351604a56ac0aa1c51 2025-11-18 23:34:46 +01:00
Bo-Yi Wu
e88fc8927a
ci(sec): schedule Trivy security scans to run daily at midnight UTC (#4439)
- Change Trivy scan schedule from quarterly to daily runs at 00:00 UTC

Signed-off-by: appleboy <appleboy.tw@gmail.com>
2025-11-18 23:05:54 +08:00
Pratham Gadkari
513a86e17f added tests for feature and coverage 2025-11-15 22:28:32 +05:30
Pratham Gadkari
b4d09053db fix(binding): support custom unmarshaler for slices & arrays 2025-11-14 23:44:50 +05:30
3 changed files with 37 additions and 7 deletions

View File

@ -8,9 +8,8 @@ on:
branches:
- master
schedule:
# Run every 3 months (quarterly) on the 1st day at 00:00 UTC
# Months: January (1), April (4), July (7), October (10)
- cron: '0 0 1 1,4,7,10 *'
# Run daily at 00:00 UTC
- cron: '0 0 * * *'
workflow_dispatch: # Allow manual trigger
permissions:

View File

@ -186,7 +186,10 @@ type BindUnmarshaler interface {
func trySetCustom(val string, value reflect.Value) (isSet bool, err error) {
switch v := value.Addr().Interface().(type) {
case BindUnmarshaler:
return true, v.UnmarshalParam(val)
if err := v.UnmarshalParam(val); err != nil {
return true, fmt.Errorf("invalid value %q: %w", val, err)
}
return true, nil
}
return false, nil
}
@ -245,7 +248,10 @@ func setByForm(value reflect.Value, field reflect.StructField, form map[string][
}
if ok, err = trySetCustom(vs[0], value); ok {
return ok, err
if err != nil {
return true, fmt.Errorf("field %q: %w", field.Name, err)
}
return true, nil
}
if vs, err = trySplit(vs, field); err != nil {
@ -268,7 +274,10 @@ func setByForm(value reflect.Value, field reflect.StructField, form map[string][
}
if ok, err = trySetCustom(vs[0], value); ok {
return ok, err
if err != nil {
return true, fmt.Errorf("field %q: %w", field.Name, err)
}
return true, nil
}
if vs, err = trySplit(vs, field); err != nil {
@ -293,7 +302,10 @@ func setByForm(value reflect.Value, field reflect.StructField, form map[string][
}
}
if ok, err := trySetCustom(val, value); ok {
return ok, err
if err != nil {
return true, fmt.Errorf("field %q: %w", field.Name, err)
}
return true, nil
}
return true, setWithProperType(val, value, field)
}

View File

@ -715,3 +715,22 @@ func TestMappingEmptyValues(t *testing.T) {
assert.Equal(t, []int{1, 2, 3}, s.SliceCsv)
})
}
type testCustom struct {
Value string
}
func (t *testCustom) UnmarshalParam(param string) error {
t.Value = "prefix_" + param
return nil
}
func TestTrySetCustomIntegration(t *testing.T) {
var s struct {
F testCustom `form:"f"`
}
err := mappingByPtr(&s, formSource{"f": {"hello"}}, "form")
require.NoError(t, err)
assert.Equal(t, "prefix_hello", s.F.Value)
}