From f31c35de482665306d41b44426aac363c91ef45b Mon Sep 17 00:00:00 2001 From: alesapin Date: Thu, 30 Sep 2021 18:56:55 +0300 Subject: [PATCH] Fix nullpointer dereference in AddDefaultDatabaseVisitor --- src/Interpreters/AddDefaultDatabaseVisitor.h | 7 ++++++- .../0_stateless/02041_test_fuzzy_alter.reference | 1 + .../queries/0_stateless/02041_test_fuzzy_alter.sql | 13 +++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 tests/queries/0_stateless/02041_test_fuzzy_alter.reference create mode 100644 tests/queries/0_stateless/02041_test_fuzzy_alter.sql diff --git a/src/Interpreters/AddDefaultDatabaseVisitor.h b/src/Interpreters/AddDefaultDatabaseVisitor.h index 63d026c9767..8dc6817af49 100644 --- a/src/Interpreters/AddDefaultDatabaseVisitor.h +++ b/src/Interpreters/AddDefaultDatabaseVisitor.h @@ -138,7 +138,12 @@ private: /// XXX: for some unknown reason this place assumes that argument can't be an alias, /// like in the similar code in `MarkTableIdentifierVisitor`. if (auto * identifier = child->children[i]->as()) - child->children[i] = identifier->createTable(); + { + /// If identifier is broken then can do nothing and get an exception + auto maybe_table_identifier = identifier->createTable(); + if (maybe_table_identifier) + child->children[i] = maybe_table_identifier; + } /// Second argument of the "in" function (or similar) may be a table name or a subselect. /// Rewrite the table name or descend into subselect. diff --git a/tests/queries/0_stateless/02041_test_fuzzy_alter.reference b/tests/queries/0_stateless/02041_test_fuzzy_alter.reference new file mode 100644 index 00000000000..d00491fd7e5 --- /dev/null +++ b/tests/queries/0_stateless/02041_test_fuzzy_alter.reference @@ -0,0 +1 @@ +1 diff --git a/tests/queries/0_stateless/02041_test_fuzzy_alter.sql b/tests/queries/0_stateless/02041_test_fuzzy_alter.sql new file mode 100644 index 00000000000..a330defc316 --- /dev/null +++ b/tests/queries/0_stateless/02041_test_fuzzy_alter.sql @@ -0,0 +1,13 @@ +DROP TABLE IF EXISTS alter_table; + +CREATE TABLE alter_table (a UInt8, b Int16) +ENGINE = MergeTree +ORDER BY a; + +ALTER TABLE alter_table + MODIFY COLUMN `b` DateTime DEFAULT now(([NULL, NULL, NULL, [-2147483648], [NULL, NULL, NULL, NULL, NULL, NULL, NULL]] AND (1048576 AND NULL) AND (NULL AND 1048575 AND NULL AND -2147483649) AND NULL) IN (test_01103.t1_distr.id)); --{serverError 47} + +SELECT 1; + + +DROP TABLE IF EXISTS alter_table;