Fix chartutils/errors.go stack overflow

- Changes to use a struct with string property
- Changes references in chartutil/values.go

Signed-off-by: Ken Perkins <ken.perkins@rackspace.com>
pull/6672/head
Ken Perkins 5 years ago
parent 01ea487582
commit 060def3b88

@ -21,11 +21,15 @@ import (
)
// ErrNoTable indicates that a chart does not have a matching table.
type ErrNoTable string
type ErrNoTable struct {
Key string
}
func (e ErrNoTable) Error() string { return fmt.Sprintf("%q is not a table", e) }
func (e ErrNoTable) Error() string { return fmt.Sprintf("%q is not a table", e.Key) }
// ErrNoValue indicates that Values does not contain a key with a value
type ErrNoValue string
type ErrNoValue struct {
Key string
}
func (e ErrNoValue) Error() string { return fmt.Sprintf("%q is not a value", e) }
func (e ErrNoValue) Error() string { return fmt.Sprintf("%q is not a value", e.Key) }

@ -1,5 +1,3 @@
package chartutil
/*
Copyright The Helm Authors.
@ -16,28 +14,24 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
package chartutil
import (
"testing"
)
func TestErrorNoTableDoesntPanic(t *testing.T) {
defer recover()
x := "empty"
y := ErrNoTable(x)
y := ErrNoTable{x}
t.Logf("error is: %s", y)
}
func TestErrorNoValueDoesntPanic(t *testing.T) {
defer recover()
x := "empty"
y := ErrNoValue(x)
y := ErrNoValue{x}
t.Logf("error is: %s", y)
}

@ -88,7 +88,7 @@ func (v Values) Encode(w io.Writer) error {
func tableLookup(v Values, simple string) (Values, error) {
v2, ok := v[simple]
if !ok {
return v, ErrNoTable(simple)
return v, ErrNoTable{simple}
}
if vv, ok := v2.(map[string]interface{}); ok {
return vv, nil
@ -101,7 +101,7 @@ func tableLookup(v Values, simple string) (Values, error) {
return vv, nil
}
return Values{}, ErrNoTable(simple)
return Values{}, ErrNoTable{simple}
}
// ReadValues will parse YAML byte data into a Values.
@ -193,20 +193,20 @@ func (v Values) pathValue(path []string) (interface{}, error) {
if _, ok := v[path[0]]; ok && !istable(v[path[0]]) {
return v[path[0]], nil
}
return nil, ErrNoValue(path[0])
return nil, ErrNoValue{path[0]}
}
key, path := path[len(path)-1], path[:len(path)-1]
// get our table for table path
t, err := v.Table(joinPath(path...))
if err != nil {
return nil, ErrNoValue(key)
return nil, ErrNoValue{key}
}
// check table for key and ensure value is not a table
if k, ok := t[key]; ok && !istable(k) {
return k, nil
}
return nil, ErrNoValue(key)
return nil, ErrNoValue{key}
}
func parsePath(key string) []string { return strings.Split(key, ".") }

Loading…
Cancel
Save