From 2ee8f625f463597cb3270c2accf65cc964240560 Mon Sep 17 00:00:00 2001 From: Torin Sandall Date: Fri, 9 Mar 2018 08:46:00 -0800 Subject: [PATCH] Escape keyword strings in ast.Ref#String Previously refs like p["not"] would be represented as p.not which does not parse because 'not' is an invalid variable name. This change ensures that ref string operands are escape if they are keywords. --- ast/term.go | 2 +- ast/term_test.go | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ast/term.go b/ast/term.go index 550508d9a2..0511fe49f2 100644 --- a/ast/term.go +++ b/ast/term.go @@ -910,7 +910,7 @@ func (ref Ref) String() string { switch p := p.Value.(type) { case String: str := string(p) - if varRegexp.MatchString(str) && len(buf) > 0 { + if varRegexp.MatchString(str) && len(buf) > 0 && !IsKeyword(str) { buf = append(buf, "."+str) } else { buf = append(buf, "["+p.String()+"]") diff --git a/ast/term_test.go b/ast/term_test.go index bc2d422a39..e179fe2608 100644 --- a/ast/term_test.go +++ b/ast/term_test.go @@ -311,6 +311,7 @@ func TestTermString(t *testing.T) { assertToString(t, RefTerm(VarTerm("foo"), StringTerm("bar")).Value, "foo.bar") assertToString(t, RefTerm(VarTerm("foo"), StringTerm("bar"), VarTerm("i"), IntNumberTerm(0), StringTerm("baz")).Value, "foo.bar[i][0].baz") assertToString(t, RefTerm(VarTerm("foo"), BooleanTerm(false), NullTerm(), StringTerm("bar")).Value, "foo[false][null].bar") + assertToString(t, RefTerm(VarTerm("p"), StringTerm("not")).Value, `p["not"]`) assertToString(t, ArrayTerm().Value, "[]") assertToString(t, ObjectTerm().Value, "{}") assertToString(t, SetTerm().Value, "set()")