mirror of
https://github.com/kemko/nomad.git
synced 2026-01-01 16:05:42 +03:00
handle when hcl parser panics
Apparently `\` followed by a digit number can cause hcl parser to panic! Will fix in hcl library, but using a hammer to squash any similar issue here.
This commit is contained in:
@@ -238,7 +238,7 @@ func Parse(rules string) (*Policy, error) {
|
||||
}
|
||||
|
||||
// Attempt to parse
|
||||
if err := hcl.Decode(p, rules); err != nil {
|
||||
if err := hclDecode(p, rules); err != nil {
|
||||
return nil, fmt.Errorf("Failed to parse ACL Policy: %v", err)
|
||||
}
|
||||
|
||||
@@ -312,3 +312,15 @@ func Parse(rules string) (*Policy, error) {
|
||||
}
|
||||
return p, nil
|
||||
}
|
||||
|
||||
// hclDecode wraps hcl.Decode function but handles any unexpected panics
|
||||
func hclDecode(p *Policy, rules string) (err error) {
|
||||
defer func() {
|
||||
if rerr := recover(); rerr != nil {
|
||||
err = fmt.Errorf("invalid acl policy: %v", rerr)
|
||||
}
|
||||
}()
|
||||
|
||||
err = hcl.Decode(p, rules)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -327,3 +327,16 @@ func TestParse(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestParse_BadInput(t *testing.T) {
|
||||
inputs := []string{
|
||||
`namespace "\500" {}`,
|
||||
}
|
||||
|
||||
for i, c := range inputs {
|
||||
t.Run(fmt.Sprintf("%d: %v", i, c), func(t *testing.T) {
|
||||
_, err := Parse(c)
|
||||
assert.Error(t, err)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user