diff --git a/read.go b/read.go index 9c3ce52..3bea68c 100644 --- a/read.go +++ b/read.go @@ -63,19 +63,19 @@ func (c *Config) Exists(key string, findByPath ...bool) (ok bool) { } case []int: // is array(is from Set) i, err := strconv.Atoi(k) - if err != nil || i < 0 || i >= len(typeData) { + if err != nil || i >= len(typeData) { return false } item = typeData[i] case []string: // is array(is from Set) i, err := strconv.Atoi(k) - if err != nil || i < 0 || i >= len(typeData) { + if err != nil || i >= len(typeData) { return false } item = typeData[i] case []any: // is array(load from file) i, err := strconv.Atoi(k) - if err != nil || i < 0 || i >= len(typeData) { + if err != nil || i >= len(typeData) { return false } item = typeData[i] @@ -214,7 +214,7 @@ func (c *Config) GetValue(key string, findByPath ...bool) (value any, ok bool) { i, err := strconv.Atoi(k) // check slice index - if err != nil || i < 0 || len(typeData) <= i { + if err != nil || len(typeData) <= i { ok = false c.addError(err) return @@ -223,7 +223,7 @@ func (c *Config) GetValue(key string, findByPath ...bool) (value any, ok bool) { item = typeData[i] case []string: // is array(is from Set) i, err := strconv.Atoi(k) - if err != nil || i < 0 || len(typeData) <= i { + if err != nil || len(typeData) <= i { ok = false c.addError(err) return @@ -232,7 +232,7 @@ func (c *Config) GetValue(key string, findByPath ...bool) (value any, ok bool) { item = typeData[i] case []any: // is array(load from file) i, err := strconv.Atoi(k) - if err != nil || i < 0 || len(typeData) <= i { + if err != nil || len(typeData) <= i { ok = false c.addError(err) return diff --git a/read_test.go b/read_test.go index 9616080..deaf395 100644 --- a/read_test.go +++ b/read_test.go @@ -499,24 +499,3 @@ func TestConfig_Duration_getter(t *testing.T) { is.Eq(7*time.Second, c.Duration("missing", 7*time.Second)) is.Eq(time.Duration(0), c.Duration("missing")) } - -func TestConfig_GetValue_negativeIndex(t *testing.T) { - is := assert.New(t) - - c := New("test-neg") - err := c.LoadData(map[string]any{ - "arr": []any{"a", "b", "c"}, - }) - is.NoErr(err) - - // A negative slice index must not panic; it is simply not found. - is.NotPanics(func() { - v, ok := c.GetValue("arr.-1") - is.False(ok) - is.Nil(v) - }) - - is.NotPanics(func() { - is.False(c.Exists("arr.-1")) - }) -}