diff --git a/changelogs/unreleased/gh-6375-fix-assert-on-unsupported-ext.md b/changelogs/unreleased/gh-6375-fix-assert-on-unsupported-ext.md new file mode 100644 index 0000000000000000000000000000000000000000..c68251239ed0f9c3e85d5ea6193823c4fa263413 --- /dev/null +++ b/changelogs/unreleased/gh-6375-fix-assert-on-unsupported-ext.md @@ -0,0 +1,5 @@ +## bugfix/sql + +* Now getting unsupported msgpack extension in SQL will throw correct + error (gh-6375). + diff --git a/src/box/sql/mem.c b/src/box/sql/mem.c index 0aca761125d3e31f81e72bb82e8e46b6ad4a0fff..4c40f15dc3f9a39ebf76f7ec07387fc350c6af16 100644 --- a/src/box/sql/mem.c +++ b/src/box/sql/mem.c @@ -3484,12 +3484,15 @@ port_lua_get_vdbemem(struct port *base, uint32_t *size) goto error; break; case MP_EXT: { - assert(field.ext_type == MP_UUID || - field.ext_type == MP_DECIMAL); - if (field.ext_type == MP_UUID) + if (field.ext_type == MP_UUID) { mem_set_uuid(&val[i], field.uuidval); - else + } else if (field.ext_type == MP_DECIMAL) { mem_set_dec(&val[i], field.decval); + } else { + diag_set(ClientError, ER_SQL_EXECUTE, + "Unsupported type passed from Lua"); + goto error; + } break; } case MP_NIL: diff --git a/test/sql-tap/engine.cfg b/test/sql-tap/engine.cfg index 35754f769d4951570e88ebb3c71e5bff6b3be7c3..587adbed9e32ee966e0cfc772d79e55feb9488d6 100644 --- a/test/sql-tap/engine.cfg +++ b/test/sql-tap/engine.cfg @@ -36,6 +36,7 @@ "memtx": {"engine": "memtx"} }, "gh-4077-iproto-execute-no-bind.test.lua": {}, + "gh-6375-assert-on-unsupported-ext.test.lua": {}, "*": { "memtx": {"engine": "memtx"}, "vinyl": {"engine": "vinyl"} diff --git a/test/sql-tap/gh-6375-assert-on-unsupported-ext.test.lua b/test/sql-tap/gh-6375-assert-on-unsupported-ext.test.lua new file mode 100755 index 0000000000000000000000000000000000000000..35980c58eb8794a6c874bd0a54cd326fde6a5399 --- /dev/null +++ b/test/sql-tap/gh-6375-assert-on-unsupported-ext.test.lua @@ -0,0 +1,25 @@ +#!/usr/bin/env tarantool +local test = require("sqltester") +test:plan(2) + +-- +-- Make sure that the correct error occurs when unsupported extension is +-- received by SQL. +-- +test:do_catchsql_test( + "gh-6375-1", + [[ + SELECT LUA('return box.space._vindex:select()[1]'); + ]], { + 1, "Failed to execute SQL statement: Unsupported type passed from Lua" + }) + +test:do_catchsql_test( + "gh-6375-2", + [[ + SELECT 1 > LUA('return box.space._vindex:select()[1]'); + ]], { + 1, "Failed to execute SQL statement: Unsupported type passed from Lua" + }) + +test:finish_test()