diff --git a/pkg/util/jsonpath/parser.go b/pkg/util/jsonpath/parser.go index 2883f7897fb..fd13affdfbc 100644 --- a/pkg/util/jsonpath/parser.go +++ b/pkg/util/jsonpath/parser.go @@ -382,16 +382,7 @@ Loop: // parseField scans a field until a terminator func (p *Parser) parseField(cur *ListNode) error { p.consumeText() -Loop: - for { - switch r := p.next(); { - case r == '\\': - p.next() - case isTerminator(r): - p.backup() - break Loop - } - } + for p.advance() {} value := p.consumeText() if value == "*" { cur.append(newWildcard()) @@ -401,6 +392,18 @@ Loop: return p.parseInsideAction(cur) } +// advance scans until next non-escaped terminator +func (p *Parser) advance() bool { + r := p.next() + if r == '\\' { + p.next() + } else if isTerminator(r) { + p.backup() + return false + } + return true +} + // isTerminator reports whether the input is at valid termination character to appear after an identifier. func isTerminator(r rune) bool { if isSpace(r) || isEndOfLine(r) {