[ 
https://issues.apache.org/jira/browse/CASSANDRA-18843?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ke Han updated CASSANDRA-18843:
-------------------------------
    Description: 
When using cassandra cqlsh shell (4.1.3 or 3.11.16), typing the following query 
will lead to an null pointer exception
{code:java}
cqlsh> CREATE KEYSPACE  ks WITH REPLICATION = { 'class' : 'SimpleStrategy', 
'replication_factor' : 1 };
cqlsh> CREATE TABLE  ks.tb (c1 INT,c2 TEXT, PRIMARY KEY (c1));
cqlsh> INSERT INTO ks.tb (c1, c2) VALUES (0, 'v1');
cqlsh> UPDATE ks.tb SET c2 = 'v2' WHERE c1 = 0;
cqlsh> UPDATE ks.tb SET 9AMu = 2, c1 = 0,c2 = 'v2';
SyntaxException: Failed parsing statement: [UPDATE ks.tb SET 9AMu = 2, c1 = 
0,c2 = 'v2';] reason: NullPointerException null {code}
Only typing the update query without creating ks can already trigger it.
{code:java}
cqlsh> UPDATE ks2.tb SET 9AMu = 2, c1 = 0,c2 = 'v2';
SyntaxException: Failed parsing statement: [UPDATE ks2.tb SET 9AMu = 2, c1 = 
0,c2 = 'v2';] reason: NullPointerException null {code}
In system.log, it shows the following exception
{code:java}
ERROR [Native-Transport-Requests-1] 2023-09-13 00:17:01,463 
QueryProcessor.java:891 - The statement: [UPDATE ks.tb SET 9AMu = 2, c1 = 0,c2 
= 'v2';] could not be parsed.
java.lang.NullPointerException: null
        at 
org.apache.cassandra.cql3.Cql_Parser.addRawUpdate(Cql_Parser.java:396)
        at 
org.apache.cassandra.cql3.Cql_Parser.normalColumnOperation(Cql_Parser.java:14334)
        at 
org.apache.cassandra.cql3.Cql_Parser.columnOperationDifferentiator(Cql_Parser.java:14233)
        at 
org.apache.cassandra.cql3.Cql_Parser.columnOperation(Cql_Parser.java:14172)
        at 
org.apache.cassandra.cql3.Cql_Parser.updateStatement(Cql_Parser.java:3846)
        at 
org.apache.cassandra.cql3.Cql_Parser.cqlStatement(Cql_Parser.java:536)
        at org.apache.cassandra.cql3.CqlParser.cqlStatement(CqlParser.java:609)
        at org.apache.cassandra.cql3.CqlParser.query(CqlParser.java:363)
        at 
org.apache.cassandra.cql3.CQLFragmentParser.parseAnyUnhandled(CQLFragmentParser.java:76)
        at 
org.apache.cassandra.cql3.QueryProcessor.parseStatement(QueryProcessor.java:883)
        at 
org.apache.cassandra.cql3.QueryProcessor.getStatement(QueryProcessor.java:853)
        at 
org.apache.cassandra.cql3.QueryProcessor.parse(QueryProcessor.java:329)
        at 
org.apache.cassandra.transport.messages.QueryMessage.execute(QueryMessage.java:115)
        at 
org.apache.cassandra.transport.Message$Request.execute(Message.java:255)
        at 
org.apache.cassandra.transport.Dispatcher.processRequest(Dispatcher.java:166)
        at 
org.apache.cassandra.transport.Dispatcher.processRequest(Dispatcher.java:185)
        at 
org.apache.cassandra.transport.Dispatcher.processRequest(Dispatcher.java:212)
        at 
org.apache.cassandra.transport.Dispatcher$RequestProcessor.run(Dispatcher.java:109)
        at org.apache.cassandra.concurrent.FutureTask$1.call(FutureTask.java:96)
        at org.apache.cassandra.concurrent.FutureTask.call(FutureTask.java:61)
        at org.apache.cassandra.concurrent.FutureTask.run(FutureTask.java:71)
        at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:142)
        at 
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.lang.Thread.run(Thread.java:750) {code}
 

The incorrect user input should be captured inside the system (invisible to 
users) and only return the SyntaxException. (I have attached the system.log.)

  was:
When using cassandra cqlsh shell (4.1.3 or 3.11.16), typing the following query 
will lead to an null pointer exception
{code:java}
cqlsh> CREATE KEYSPACE  ks WITH REPLICATION = { 'class' : 'SimpleStrategy', 
'replication_factor' : 1 };
cqlsh> CREATE TABLE  ks.tb (c1 INT,c2 TEXT, PRIMARY KEY (c1));
cqlsh> INSERT INTO ks.tb (c1, c2) VALUES (0, 'v1');
cqlsh> UPDATE ks.tb SET c2 = 'v2' WHERE c1 = 0;
cqlsh> UPDATE ks.tb SET 9AMu = 2, c1 = 0,c2 = 'v2';
SyntaxException: Failed parsing statement: [UPDATE ks.tb SET 9AMu = 2, c1 = 
0,c2 = 'v2';] reason: NullPointerException null {code}
Only typing the update query without creating ks can already trigger it.
{code:java}
cqlsh> UPDATE ks2.tb SET 9AMu = 2, c1 = 0,c2 = 'v2';
SyntaxException: Failed parsing statement: [UPDATE ks2.tb SET 9AMu = 2, c1 = 
0,c2 = 'v2';] reason: NullPointerException null {code}
In system.log, it shows the following exception
{code:java}
ERROR [Native-Transport-Requests-1] 2023-09-13 00:17:01,463 
QueryProcessor.java:891 - The statement: [UPDATE ks.tb SET 9AMu = 2, c1 = 0,c2 
= 'v2';] could not be parsed.
java.lang.NullPointerException: null
        at 
org.apache.cassandra.cql3.Cql_Parser.addRawUpdate(Cql_Parser.java:396)
        at 
org.apache.cassandra.cql3.Cql_Parser.normalColumnOperation(Cql_Parser.java:14334)
        at 
org.apache.cassandra.cql3.Cql_Parser.columnOperationDifferentiator(Cql_Parser.java:14233)
        at 
org.apache.cassandra.cql3.Cql_Parser.columnOperation(Cql_Parser.java:14172)
        at 
org.apache.cassandra.cql3.Cql_Parser.updateStatement(Cql_Parser.java:3846)
        at 
org.apache.cassandra.cql3.Cql_Parser.cqlStatement(Cql_Parser.java:536)
        at org.apache.cassandra.cql3.CqlParser.cqlStatement(CqlParser.java:609)
        at org.apache.cassandra.cql3.CqlParser.query(CqlParser.java:363)
        at 
org.apache.cassandra.cql3.CQLFragmentParser.parseAnyUnhandled(CQLFragmentParser.java:76)
        at 
org.apache.cassandra.cql3.QueryProcessor.parseStatement(QueryProcessor.java:883)
        at 
org.apache.cassandra.cql3.QueryProcessor.getStatement(QueryProcessor.java:853)
        at 
org.apache.cassandra.cql3.QueryProcessor.parse(QueryProcessor.java:329)
        at 
org.apache.cassandra.transport.messages.QueryMessage.execute(QueryMessage.java:115)
        at 
org.apache.cassandra.transport.Message$Request.execute(Message.java:255)
        at 
org.apache.cassandra.transport.Dispatcher.processRequest(Dispatcher.java:166)
        at 
org.apache.cassandra.transport.Dispatcher.processRequest(Dispatcher.java:185)
        at 
org.apache.cassandra.transport.Dispatcher.processRequest(Dispatcher.java:212)
        at 
org.apache.cassandra.transport.Dispatcher$RequestProcessor.run(Dispatcher.java:109)
        at org.apache.cassandra.concurrent.FutureTask$1.call(FutureTask.java:96)
        at org.apache.cassandra.concurrent.FutureTask.call(FutureTask.java:61)
        at org.apache.cassandra.concurrent.FutureTask.run(FutureTask.java:71)
        at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:142)
        at 
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.lang.Thread.run(Thread.java:750) {code}
 

The incorrect user input should be captured inside the system (invisible to 
users) and only return the SyntaxException. 

I have attached the system.log.


> Query parsing error handling problem: NPE when user types an incorrect query 
> statement
> --------------------------------------------------------------------------------------
>
>                 Key: CASSANDRA-18843
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-18843
>             Project: Cassandra
>          Issue Type: Bug
>          Components: CQL/Interpreter, CQL/Syntax
>            Reporter: Ke Han
>            Priority: Normal
>         Attachments: system.log
>
>
> When using cassandra cqlsh shell (4.1.3 or 3.11.16), typing the following 
> query will lead to an null pointer exception
> {code:java}
> cqlsh> CREATE KEYSPACE  ks WITH REPLICATION = { 'class' : 'SimpleStrategy', 
> 'replication_factor' : 1 };
> cqlsh> CREATE TABLE  ks.tb (c1 INT,c2 TEXT, PRIMARY KEY (c1));
> cqlsh> INSERT INTO ks.tb (c1, c2) VALUES (0, 'v1');
> cqlsh> UPDATE ks.tb SET c2 = 'v2' WHERE c1 = 0;
> cqlsh> UPDATE ks.tb SET 9AMu = 2, c1 = 0,c2 = 'v2';
> SyntaxException: Failed parsing statement: [UPDATE ks.tb SET 9AMu = 2, c1 = 
> 0,c2 = 'v2';] reason: NullPointerException null {code}
> Only typing the update query without creating ks can already trigger it.
> {code:java}
> cqlsh> UPDATE ks2.tb SET 9AMu = 2, c1 = 0,c2 = 'v2';
> SyntaxException: Failed parsing statement: [UPDATE ks2.tb SET 9AMu = 2, c1 = 
> 0,c2 = 'v2';] reason: NullPointerException null {code}
> In system.log, it shows the following exception
> {code:java}
> ERROR [Native-Transport-Requests-1] 2023-09-13 00:17:01,463 
> QueryProcessor.java:891 - The statement: [UPDATE ks.tb SET 9AMu = 2, c1 = 
> 0,c2 = 'v2';] could not be parsed.
> java.lang.NullPointerException: null
>         at 
> org.apache.cassandra.cql3.Cql_Parser.addRawUpdate(Cql_Parser.java:396)
>         at 
> org.apache.cassandra.cql3.Cql_Parser.normalColumnOperation(Cql_Parser.java:14334)
>         at 
> org.apache.cassandra.cql3.Cql_Parser.columnOperationDifferentiator(Cql_Parser.java:14233)
>         at 
> org.apache.cassandra.cql3.Cql_Parser.columnOperation(Cql_Parser.java:14172)
>         at 
> org.apache.cassandra.cql3.Cql_Parser.updateStatement(Cql_Parser.java:3846)
>         at 
> org.apache.cassandra.cql3.Cql_Parser.cqlStatement(Cql_Parser.java:536)
>         at 
> org.apache.cassandra.cql3.CqlParser.cqlStatement(CqlParser.java:609)
>         at org.apache.cassandra.cql3.CqlParser.query(CqlParser.java:363)
>         at 
> org.apache.cassandra.cql3.CQLFragmentParser.parseAnyUnhandled(CQLFragmentParser.java:76)
>         at 
> org.apache.cassandra.cql3.QueryProcessor.parseStatement(QueryProcessor.java:883)
>         at 
> org.apache.cassandra.cql3.QueryProcessor.getStatement(QueryProcessor.java:853)
>         at 
> org.apache.cassandra.cql3.QueryProcessor.parse(QueryProcessor.java:329)
>         at 
> org.apache.cassandra.transport.messages.QueryMessage.execute(QueryMessage.java:115)
>         at 
> org.apache.cassandra.transport.Message$Request.execute(Message.java:255)
>         at 
> org.apache.cassandra.transport.Dispatcher.processRequest(Dispatcher.java:166)
>         at 
> org.apache.cassandra.transport.Dispatcher.processRequest(Dispatcher.java:185)
>         at 
> org.apache.cassandra.transport.Dispatcher.processRequest(Dispatcher.java:212)
>         at 
> org.apache.cassandra.transport.Dispatcher$RequestProcessor.run(Dispatcher.java:109)
>         at 
> org.apache.cassandra.concurrent.FutureTask$1.call(FutureTask.java:96)
>         at org.apache.cassandra.concurrent.FutureTask.call(FutureTask.java:61)
>         at org.apache.cassandra.concurrent.FutureTask.run(FutureTask.java:71)
>         at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:142)
>         at 
> io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
>         at java.lang.Thread.run(Thread.java:750) {code}
>  
> The incorrect user input should be captured inside the system (invisible to 
> users) and only return the SyntaxException. (I have attached the system.log.)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to