diff --git a/promql/parser/parse.go b/promql/parser/parse.go index 615055d905..e99f5f4570 100644 --- a/promql/parser/parse.go +++ b/promql/parser/parse.go @@ -451,6 +451,11 @@ func (p *parser) newAggregateExpr(op Item, modifier, args Node) (ret *AggregateE ret = modifier.(*AggregateExpr) arguments := args.(Expressions) + if len(p.closingParens) == 0 { + // Prevents invalid array accesses. + // The error is already captured by the parser. + return + } ret.PosRange = posrange.PositionRange{ Start: op.Pos, End: p.closingParens[0], diff --git a/promql/parser/parse_test.go b/promql/parser/parse_test.go index a1b59af8de..73371306af 100644 --- a/promql/parser/parse_test.go +++ b/promql/parser/parse_test.go @@ -4540,6 +4540,11 @@ var testExpr = []struct { PosRange: posrange.PositionRange{Start: 0, End: 20}, }, }, + { + input: "sum(rate(", + fail: true, + errMsg: "unclosed left parenthesis", + }, } func makeInt64Pointer(val int64) *int64 {