go-playground / validator

:100:Go Struct and Field validation, including Cross Field, Cross Struct, Map, Slice and Array diving
MIT License
16.55k stars 1.31k forks source link

Panic on max, min Validation Tag with struct Fields in Version v10.20.0 and above #1300

Open iamsushank opened 1 month ago

iamsushank commented 1 month ago

Package version eg. v9, v10:

v10.20.0

Issue, Question or Enhancement:

The go-playground/validator package panics when validating struct fields with the max tag on null.Int fields. This issue did not occur in earlier versions. Previously, the package would not panic.

Code sample, to showcase or reproduce:

package main

import (
    "fmt"
    "github.com/go-playground/validator/v10"
    "gopkg.in/guregu/null.v4"
)

type User struct {
    Name     string      `json:"name"`
    Age      int         `json:"age"`
    NullAge  null.Int    `validate:"max=10"`
}

func main() {
    v := validator.New()
    user := User{
        Name:     "John Doe",
        Age:      30,
        NullAge:  null.IntFrom(15),
    }

    err := v.Struct(user)
    if err != nil {
        fmt.Println("Validation failed:", err)
    } else {
        fmt.Println("Validation succeeded")
    }
}

Expected behavior:

The validator should not panic when encountering the max tag on null.Int fields. Ideally, it should either validate the null.Int field properly or skip validation without causing a panic.

Actual behavior:

The validator panics when it encounters the max tag on null.Int fields.

Steps to reproduce:

1.  Define a struct with a null.Int field and a max validation tag.
2.  Create an instance of the struct with a value for the null.Int field.
3.  Run the validator on the struct.

There might me other tags aswell which now panics with struct i have checked with min, max only

vasi1e commented 1 month ago

I also have the same problem starting from version 10.16.0 but with my own custom struct

slugbyte commented 2 days ago

I have the same issue for null.String with min and max