Skip to content

SQL: NPE for a null parameter in LIKE #53557

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
bpintea opened this issue Mar 13, 2020 · 2 comments · Fixed by #53573
Closed

SQL: NPE for a null parameter in LIKE #53557

bpintea opened this issue Mar 13, 2020 · 2 comments · Fixed by #53573
Assignees
Labels

Comments

@bpintea
Copy link
Contributor

bpintea commented Mar 13, 2020

Providing a null value parameter to the LIKE operator and a parameter marker leads to an NPE, like exemplified below.

Example:
SELECT ... FROM ... WHERE field LIKE ?
and parameter {"type": ..., "value":null}

java.lang.NullPointerException: null
        at org.elasticsearch.xpack.sql.parser.ExpressionBuilder.visitPattern(ExpressionBuilder.java:266) ~[?:?]
        at org.elasticsearch.xpack.sql.parser.ExpressionBuilder.visitPredicated(ExpressionBuilder.java:235) ~[?:?]
        at org.elasticsearch.xpack.sql.parser.ExpressionBuilder.visitPredicated(ExpressionBuilder.java:138) ~[?:?]
        at org.elasticsearch.xpack.sql.parser.SqlBaseParser$PredicatedContext.accept(SqlBaseParser.java:3590) ~[?:?]
        at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:70) ~[antlr4-runtime-4.5.3.jar:4.5.3]
        at org.elasticsearch.xpack.sql.parser.SqlBaseBaseVisitor.visitBooleanDefault(SqlBaseBaseVisitor.java:300) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.parser.SqlBaseParser$BooleanDefaultContext.accept(SqlBaseParser.java:3227) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.parser.AbstractBuilder.typedParsing(AbstractBuilder.java:42) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.parser.ExpressionBuilder.expression(ExpressionBuilder.java:147) ~[?:?]
        at org.elasticsearch.xpack.sql.parser.LogicalPlanBuilder.visitQuerySpecification(LogicalPlanBuilder.java:126) ~[?:?]
        at org.elasticsearch.xpack.sql.parser.LogicalPlanBuilder.visitQuerySpecification(LogicalPlanBuilder.java:64) ~[?:?]
        at org.elasticsearch.xpack.sql.parser.SqlBaseParser$QuerySpecificationContext.accept(SqlBaseParser.java:1723) ~[?:?]
        at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:70) ~[antlr4-runtime-4.5.3.jar:4.5.3]
        at org.elasticsearch.xpack.sql.parser.SqlBaseBaseVisitor.visitQueryPrimaryDefault(SqlBaseBaseVisitor.java:125) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.parser.SqlBaseParser$QueryPrimaryDefaultContext.accept(SqlBaseParser.java:1553) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.parser.AbstractBuilder.typedParsing(AbstractBuilder.java:42) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.parser.AbstractBuilder.plan(AbstractBuilder.java:53) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.parser.LogicalPlanBuilder.visitQueryNoWith(LogicalPlanBuilder.java:95) ~[?:?]
        at org.elasticsearch.xpack.sql.parser.LogicalPlanBuilder.visitQueryNoWith(LogicalPlanBuilder.java:64) ~[?:?]
        at org.elasticsearch.xpack.sql.parser.SqlBaseParser$QueryNoWithContext.accept(SqlBaseParser.java:1363) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.parser.AbstractBuilder.typedParsing(AbstractBuilder.java:42) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.parser.AbstractBuilder.plan(AbstractBuilder.java:53) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.parser.LogicalPlanBuilder.visitQuery(LogicalPlanBuilder.java:72) ~[?:?]
        at org.elasticsearch.xpack.sql.parser.LogicalPlanBuilder.visitQuery(LogicalPlanBuilder.java:64) ~[?:?]
        at org.elasticsearch.xpack.sql.parser.SqlBaseParser$QueryContext.accept(SqlBaseParser.java:1280) ~[?:?]
        at org.antlr.v4.runtime.tree.AbstractParseTreeVisitor.visitChildren(AbstractParseTreeVisitor.java:70) ~[antlr4-runtime-4.5.3.jar:4.5.3]
        at org.elasticsearch.xpack.sql.parser.SqlBaseBaseVisitor.visitStatementDefault(SqlBaseBaseVisitor.java:34) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.parser.SqlBaseParser$StatementDefaultContext.accept(SqlBaseParser.java:466) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.parser.AbstractBuilder.typedParsing(AbstractBuilder.java:42) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.parser.AbstractBuilder.plan(AbstractBuilder.java:53) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.parser.AstBuilder.visitSingleStatement(AstBuilder.java:26) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.parser.AstBuilder.visitSingleStatement(AstBuilder.java:15) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.parser.SqlBaseParser$SingleStatementContext.accept(SqlBaseParser.java:186) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.parser.AbstractBuilder.typedParsing(AbstractBuilder.java:42) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.parser.AbstractBuilder.plan(AbstractBuilder.java:53) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.parser.SqlParser.invokeParser(SqlParser.java:129) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.parser.SqlParser.createStatement(SqlParser.java:66) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.session.SqlSession.doParse(SqlSession.java:99) ~[x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.session.SqlSession.sqlExecutable(SqlSession.java:169) [x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.session.SqlSession.sql(SqlSession.java:164) [x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.execution.PlanExecutor.sql(PlanExecutor.java:98) [x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.plugin.TransportSqlQueryAction.operation(TransportSqlQueryAction.java:83) [x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.plugin.TransportSqlQueryAction.doExecute(TransportSqlQueryAction.java:68) [x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.xpack.sql.plugin.TransportSqlQueryAction.doExecute(TransportSqlQueryAction.java:46) [x-pack-sql-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
        at org.elasticsearch.action.support.TransportAction$RequestFilterChain.proceed(TransportAction.java:88) [elasticsearch-8.0.0-SNAPSHOT.jar:8.0.0-SNAPSHOT]
@elasticmachine
Copy link
Collaborator

Pinging @elastic/es-search (:Search/SQL)

matriv added a commit to matriv/elasticsearch that referenced this issue Mar 14, 2020
Fix NPE when `null` is passed as a parameter for a parameterized
pattern of LIKE/RLIKE. e.g.: `field LIKE ?` params=[null]`
Check for null pattern in LIKE/RLIKE as for RLIKE (RegexpQuery) we
get an IllegalArgumentExpression from Lucence but for LIKE
(WildcardQuery) we get an NPE.

Fixes: elastic#53557
matriv added a commit that referenced this issue Mar 16, 2020
Fix NPE when `null` is passed as a parameter for a parameterized
pattern of LIKE/RLIKE. e.g.: `field LIKE ?` params=[null]`
Check for null pattern in LIKE/RLIKE as for RLIKE (RegexpQuery) we
get an IllegalArgumentExpression from Lucence but for LIKE
(WildcardQuery) we get an NPE.

Fixes: #53557
matriv added a commit that referenced this issue Mar 16, 2020
Fix NPE when `null` is passed as a parameter for a parameterized
pattern of LIKE/RLIKE. e.g.: `field LIKE ?` params=[null]`
Check for null pattern in LIKE/RLIKE as for RLIKE (RegexpQuery) we
get an IllegalArgumentExpression from Lucence but for LIKE
(WildcardQuery) we get an NPE.

Fixes: #53557
(cherry picked from commit ec3481e)
matriv added a commit that referenced this issue Mar 16, 2020
Fix NPE when `null` is passed as a parameter for a parameterized
pattern of LIKE/RLIKE. e.g.: `field LIKE ?` params=[null]`
Check for null pattern in LIKE/RLIKE as for RLIKE (RegexpQuery) we
get an IllegalArgumentExpression from Lucence but for LIKE
(WildcardQuery) we get an NPE.

Fixes: #53557
(cherry picked from commit ec3481e)
@matriv
Copy link
Contributor

matriv commented Mar 16, 2020

master : ec3481e
7.x : 7230340
7.6 : e31f17a

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants