Skip to content

ES|QL: NPE with null query parameter #142281

@luigidellaquila

Description

@luigidellaquila
java.lang.NullPointerException: Cannot invoke \"Object.toString()\" because the return value of \"org.elasticsearch.xpack.esql.parser.QueryParam.value()\" is null
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.visitDoubleParam(ExpressionBuilder.java:1321)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.visitInputNamedOrPositionalDoubleParams(ExpressionBuilder.java:1303)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.visitInputNamedOrPositionalDoubleParams(ExpressionBuilder.java:105)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParser$InputNamedOrPositionalDoubleParamsContext.accept(EsqlBaseParser.java:2764)
	at org.elasticsearch.xpack.esql.parser.ParserUtils.typedParsing(ParserUtils.java:72)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.expression(ExpressionBuilder.java:183)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.visitIdentifierOrParameter(ExpressionBuilder.java:791)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.visitIdentifierOrParameter(ExpressionBuilder.java:105)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParser$IdentifierOrParameterContext.accept(EsqlBaseParser.java:2833)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18)
	at org.elasticsearch.xpack.esql.parser.AbstractBuilder.lambda$visit$0(AbstractBuilder.java:18)
	at org.elasticsearch.xpack.esql.parser.ParserUtils.visit(ParserUtils.java:53)
	at org.elasticsearch.xpack.esql.parser.AbstractBuilder.visit(AbstractBuilder.java:18)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.visit(ExpressionBuilder.java:105)
	at org.elasticsearch.xpack.esql.parser.ParserUtils.visitList(ParserUtils.java:65)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.visitFieldName(ExpressionBuilder.java:329)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.visitQualifiedName(ExpressionBuilder.java:321)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.visitQualifiedName(ExpressionBuilder.java:313)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.visitDereference(ExpressionBuilder.java:696)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.visitDereference(ExpressionBuilder.java:105)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParser$DereferenceContext.accept(EsqlBaseParser.java:6663)
	at org.elasticsearch.xpack.esql.parser.ParserUtils.typedParsing(ParserUtils.java:72)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.expression(ExpressionBuilder.java:183)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.visitOperatorExpressionDefault(ExpressionBuilder.java:691)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.visitOperatorExpressionDefault(ExpressionBuilder.java:105)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParser$OperatorExpressionDefaultContext.accept(EsqlBaseParser.java:6445)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParserBaseVisitor.visitValueExpressionDefault(EsqlBaseParserBaseVisitor.java:666)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParser$ValueExpressionDefaultContext.accept(EsqlBaseParser.java:6340)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParserBaseVisitor.visitBooleanDefault(EsqlBaseParserBaseVisitor.java:596)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParser$BooleanDefaultContext.accept(EsqlBaseParser.java:5655)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visit(AbstractParseTreeVisitor.java:18)
	at org.elasticsearch.xpack.esql.parser.AbstractBuilder.lambda$visit$0(AbstractBuilder.java:18)
	at org.elasticsearch.xpack.esql.parser.ParserUtils.visit(ParserUtils.java:53)
	at org.elasticsearch.xpack.esql.parser.AbstractBuilder.visit(AbstractBuilder.java:18)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.visit(ExpressionBuilder.java:105)
	at org.elasticsearch.xpack.esql.parser.ParserUtils.visitList(ParserUtils.java:65)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.expressions(ExpressionBuilder.java:190)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.visitFunctionExpression(ExpressionBuilder.java:702)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.visitFunctionExpression(ExpressionBuilder.java:105)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParser$FunctionExpressionContext.accept(EsqlBaseParser.java:6892)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParserBaseVisitor.visitFunction(EsqlBaseParserBaseVisitor.java:729)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParser$FunctionContext.accept(EsqlBaseParser.java:6753)
	at org.elasticsearch.xpack.esql.parser.ParserUtils.typedParsing(ParserUtils.java:72)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.expression(ExpressionBuilder.java:183)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.visitOperatorExpressionDefault(ExpressionBuilder.java:691)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.visitOperatorExpressionDefault(ExpressionBuilder.java:105)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParser$OperatorExpressionDefaultContext.accept(EsqlBaseParser.java:6445)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParserBaseVisitor.visitValueExpressionDefault(EsqlBaseParserBaseVisitor.java:666)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParser$ValueExpressionDefaultContext.accept(EsqlBaseParser.java:6340)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParserBaseVisitor.visitBooleanDefault(EsqlBaseParserBaseVisitor.java:596)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParser$BooleanDefaultContext.accept(EsqlBaseParser.java:5655)
	at org.elasticsearch.xpack.esql.parser.ParserUtils.typedParsing(ParserUtils.java:72)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.expression(ExpressionBuilder.java:183)
	at org.elasticsearch.xpack.esql.parser.ExpressionBuilder.visitGrouping(ExpressionBuilder.java:1150)
	at org.elasticsearch.xpack.esql.parser.LogicalPlanBuilder.stats(LogicalPlanBuilder.java:488)
	at org.elasticsearch.xpack.esql.parser.LogicalPlanBuilder.visitStatsCommand(LogicalPlanBuilder.java:466)
	at org.elasticsearch.xpack.esql.parser.LogicalPlanBuilder.visitStatsCommand(LogicalPlanBuilder.java:122)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParser$StatsCommandContext.accept(EsqlBaseParser.java:1909)
	at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:46)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParserBaseVisitor.visitProcessingCommand(EsqlBaseParserBaseVisitor.java:64)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParser$ProcessingCommandContext.accept(EsqlBaseParser.java:672)
	at org.elasticsearch.xpack.esql.parser.ParserUtils.typedParsing(ParserUtils.java:72)
	at org.elasticsearch.xpack.esql.parser.LogicalPlanBuilder.visitCompositeQuery(LogicalPlanBuilder.java:214)
	at org.elasticsearch.xpack.esql.parser.LogicalPlanBuilder.visitCompositeQuery(LogicalPlanBuilder.java:122)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParser$CompositeQueryContext.accept(EsqlBaseParser.java:395)
	at org.elasticsearch.xpack.esql.parser.ParserUtils.typedParsing(ParserUtils.java:72)
	at org.elasticsearch.xpack.esql.parser.LogicalPlanBuilder.plan(LogicalPlanBuilder.java:144)
	at org.elasticsearch.xpack.esql.parser.LogicalPlanBuilder.visitCompositeQuery(LogicalPlanBuilder.java:212)
	at org.elasticsearch.xpack.esql.parser.LogicalPlanBuilder.visitCompositeQuery(LogicalPlanBuilder.java:122)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParser$CompositeQueryContext.accept(EsqlBaseParser.java:395)
	at org.elasticsearch.xpack.esql.parser.ParserUtils.typedParsing(ParserUtils.java:72)
	at org.elasticsearch.xpack.esql.parser.LogicalPlanBuilder.plan(LogicalPlanBuilder.java:144)
	at org.elasticsearch.xpack.esql.parser.LogicalPlanBuilder.visitSingleStatement(LogicalPlanBuilder.java:177)
	at org.elasticsearch.xpack.esql.parser.LogicalPlanBuilder.visitStatements(LogicalPlanBuilder.java:167)
	at org.elasticsearch.xpack.esql.parser.LogicalPlanBuilder.visitStatements(LogicalPlanBuilder.java:122)
	at org.elasticsearch.xpack.esql.parser.EsqlBaseParser$StatementsContext.accept(EsqlBaseParser.java:266)
	at org.elasticsearch.xpack.esql.parser.ParserUtils.typedParsing(ParserUtils.java:72)
	at org.elasticsearch.xpack.esql.parser.LogicalPlanBuilder.statement(LogicalPlanBuilder.java:139)
	at org.elasticsearch.xpack.esql.parser.EsqlParser.invokeParser(EsqlParser.java:237)
	at org.elasticsearch.xpack.esql.parser.EsqlParser.createStatement(EsqlParser.java:195)
	at org.elasticsearch.xpack.esql.parser.EsqlParser.parse(EsqlParser.java:155)
	at org.elasticsearch.xpack.esql.session.EsqlSession.parse(EsqlSession.java:582)
	at org.elasticsearch.xpack.esql.session.EsqlSession.execute(EsqlSession.java:229)
	at org.elasticsearch.xpack.esql.execution.PlanExecutor.lambda$esql$2(PlanExecutor.java:110)
	at org.elasticsearch.server@9.4.0/org.elasticsearch.action.ActionListener.run(ActionListener.java:465)
	at org.elasticsearch.xpack.esql.execution.PlanExecutor.esql(PlanExecutor.java:110)

I had no chance to test it, but I guess we are just not considering that a parameter value can be null https://github.com/elastic/elasticsearch/blob/main/x-pack/plugin/esql/src/main/java/org/elasticsearch/xpack/esql/parser/ExpressionBuilder.java#L1321

Metadata

Metadata

Labels

:Analytics/ES|QLAKA ESQL>bugTeam:AnalyticsMeta label for analytical engine team (ESQL/Aggs/Geo)medium-riskAn open issue or test failure that is a medium risk to future releases

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions