14 сент. 2018 г., в 18:17, Vladimir Davydov <vdavydov.dev@gmail.com> написал(а):
On Mon, Sep 10, 2018 at 04:36:43PM +0300, Serge Petrenko wrote:
Calling box.schema.user:passwd() instead of box.schema.user.passwd()
This isn't a proper fix, because the following command still crashes:
box.schema.user.passwd(123)
And this one crashes too:
box.session.su('admin', function(x) return #x end, 123)
Making error messages user-friendly is good, but I think that #3659 is
about invalid usage of luaT_error in lbox_session_su...
Hi! I found the cause of this and fixed the issue. I also removed the type check since it
seems to be outside of the patch scope now. New diff is below.
---
src/box/lua/session.c | 5 ++++-
test/box/misc.result | 9 +++++++++
test/box/misc.test.lua | 6 ++++++
3 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/src/box/lua/session.c b/src/box/lua/session.c
index b2e1400b6..7541da0a7 100644
--- a/src/box/lua/session.c
+++ b/src/box/lua/session.c
@@ -201,8 +201,11 @@ lbox_session_su(struct lua_State *L)
/* Restore the original credentials. */
fiber_set_user(fiber(), old_credentials);
- if (error)
+ if (error) {
+ luaT_toerror(L);
luaT_error(L);
+ }
+
return lua_gettop(L) - 1;
}
diff --git a/test/box/misc.result b/test/box/misc.result
index 62376754e..4ee4797d0 100644
--- a/test/box/misc.result
+++ b/test/box/misc.result
@@ -1148,6 +1148,15 @@ s = box.schema.space.create('test', {user="no_such_user"})
---
- error: User 'no_such_user' is not found
...
+--
+-- gh-3659 assertion failure after an error in code called from
+-- box.session.su()
+--
+box.session.su("admin", function(x) return #x end, 3)
+---
+- error: '[string "return box.session.su("admin", function(x) re..."]:1: attempt to
+ get length of local ''x'' (a number value)'
+...
-- Too long WAL write warning (gh-2743).
s = box.schema.space.create('test')
---
diff --git a/test/box/misc.test.lua b/test/box/misc.test.lua
index d6815645e..ee81c7be1 100644
--- a/test/box/misc.test.lua
+++ b/test/box/misc.test.lua
@@ -320,6 +320,12 @@ s:drop()
--
s = box.schema.space.create('test', {user="no_such_user"})
+--
+-- gh-3659 assertion failure after an error in code called from
+-- box.session.su()
+--
+box.session.su("admin", function(x) return #x end, 3)
+
-- Too long WAL write warning (gh-2743).
s = box.schema.space.create('test')
_ = s:create_index('pk')
--
2.15.2 (Apple Git-101.1)