From c369626ac19c4f03fb15e5d869c6c9d39ad56fa3 Mon Sep 17 00:00:00 2001 From: Jan de Visser Date: Sat, 13 Nov 2021 17:30:29 -0500 Subject: LibSQL: Gracefully react to unimplemented valid SQL Fixes a crash that was caused by a syntax error which is difficult to catch by the parser: usually identifiers are accepted in column lists, but they are not in a list of column values to be inserted in an INSERT. Fixed this by putting in a heuristic check; we probably need a better way to do this. Included tests for this case. Also introduced a new SQL Error code, `NotYetImplemented`, and return that instead of crashing when encountering unimplemented SQL. --- Userland/Libraries/LibSQL/AST/Expression.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'Userland/Libraries/LibSQL') diff --git a/Userland/Libraries/LibSQL/AST/Expression.cpp b/Userland/Libraries/LibSQL/AST/Expression.cpp index d4030b3532..ce4c972e0c 100644 --- a/Userland/Libraries/LibSQL/AST/Expression.cpp +++ b/Userland/Libraries/LibSQL/AST/Expression.cpp @@ -169,6 +169,10 @@ Value UnaryOperatorExpression::evaluate(ExecutionContext& context) const Value ColumnNameExpression::evaluate(ExecutionContext& context) const { + if (!context.current_row) { + context.result->set_error(SQLErrorCode::SyntaxError, column_name()); + return Value::null(); + } auto& descriptor = *context.current_row->descriptor(); VERIFY(context.current_row->size() == descriptor.size()); Optional index_in_row; -- cgit v1.2.3