From: Chris Sosnin <k.sosnin@tarantool.org> To: v.shpilevoy@tarantool.org, tarantool-patches@dev.tarantool.org Subject: [Tarantool-patches] [PATCH] sql: fix segfault in pragma table_info Date: Mon, 27 Jan 2020 17:04:20 +0300 [thread overview] Message-ID: <20200127140420.52553-1-k.sosnin@tarantool.org> (raw) We should first check that primary key is not NULL. Closes #4745 --- branch: https://github.com/tarantool/tarantool/tree/ksosnin/gh-4745-table-info-assertion issue: https://github.com/tarantool/tarantool/issues/4745 src/box/sql/pragma.c | 6 +++--- test/sql/engine.cfg | 1 + test/sql/gh-4745-table-info-assertion.result | 8 ++++++++ test/sql/gh-4745-table-info-assertion.test.lua | 5 +++++ 4 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 test/sql/gh-4745-table-info-assertion.result create mode 100644 test/sql/gh-4745-table-info-assertion.test.lua diff --git a/src/box/sql/pragma.c b/src/box/sql/pragma.c index 636f519ef..a77bf4b16 100644 --- a/src/box/sql/pragma.c +++ b/src/box/sql/pragma.c @@ -112,10 +112,10 @@ sql_pragma_table_info(struct Parse *parse, const char *tbl_name) struct Vdbe *v = sqlGetVdbe(parse); struct field_def *field = space->def->fields; for (uint32_t i = 0, k; i < space->def->field_count; ++i, ++field) { - if (!sql_space_column_is_in_pk(space, i)) { - k = 0; - } else if (pk == NULL) { + if (pk == NULL) { k = 1; + } else if (!sql_space_column_is_in_pk(space, i)) { + k = 0; } else { struct key_def *kdef = pk->def->key_def; k = key_def_find_by_fieldno(kdef, i) - kdef->parts + 1; diff --git a/test/sql/engine.cfg b/test/sql/engine.cfg index 1e9f08c6a..06c761166 100644 --- a/test/sql/engine.cfg +++ b/test/sql/engine.cfg @@ -2,6 +2,7 @@ "vinyl-opts.test.lua" : { "vinyl": {"engine": "vinyl"} }, + "gh-4745-table-info-assertion.test.lua": { }, "bind.test.lua": { "remote": {"remote": "true"}, "local": {"remote": "false"} diff --git a/test/sql/gh-4745-table-info-assertion.result b/test/sql/gh-4745-table-info-assertion.result new file mode 100644 index 000000000..51a75b816 --- /dev/null +++ b/test/sql/gh-4745-table-info-assertion.result @@ -0,0 +1,8 @@ +-- test-run result file version 2 +-- +-- The following pragma shouldn't cause +-- assertion fault +-- +table_info = box.execute('pragma table_info("_vinyl_deferred_delete")') + | --- + | ... diff --git a/test/sql/gh-4745-table-info-assertion.test.lua b/test/sql/gh-4745-table-info-assertion.test.lua new file mode 100644 index 000000000..19d2f6955 --- /dev/null +++ b/test/sql/gh-4745-table-info-assertion.test.lua @@ -0,0 +1,5 @@ +-- +-- The following pragma shouldn't cause +-- assertion fault +-- +table_info = box.execute('pragma table_info("_vinyl_deferred_delete")') -- 2.21.1 (Apple Git-122.3)
next reply other threads:[~2020-01-27 14:04 UTC|newest] Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-01-27 14:04 Chris Sosnin [this message] 2020-01-28 0:24 ` Vladislav Shpilevoy 2020-01-30 12:04 ` Nikita Pettik 2020-01-30 12:53 ` Chris Sosnin 2020-02-05 22:22 ` Vladislav Shpilevoy 2020-02-06 17:59 ` Nikita Pettik
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200127140420.52553-1-k.sosnin@tarantool.org \ --to=k.sosnin@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH] sql: fix segfault in pragma table_info' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox