Tarantool development patches archive
 help / color / mirror / Atom feed
From: Serge Petrenko <sergepetrenko@tarantool.org>
To: Vladimir Davydov <vdavydov.dev@gmail.com>
Cc: tarantool-patches@freelists.org
Subject: Re: [tarantool-patches] [PATCH] lua: fix assertion failure after improper box.schema.user:passwd() call
Date: Mon, 17 Sep 2018 17:48:53 +0300	[thread overview]
Message-ID: <B81E047D-2541-4413-AEE3-5951F6E4C1E7@tarantool.org> (raw)
In-Reply-To: <20180914151752.f7f2nwa5dtpu334u@esperanza>

[-- Attachment #1: Type: text/plain, Size: 2570 bytes --]



> 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)

[-- Attachment #2: Type: text/html, Size: 4729 bytes --]

  reply	other threads:[~2018-09-17 14:48 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-10 13:36 Serge Petrenko
2018-09-14 15:17 ` Vladimir Davydov
2018-09-17 14:48   ` Serge Petrenko [this message]
2018-09-17 15:42     ` Vladimir Davydov

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=B81E047D-2541-4413-AEE3-5951F6E4C1E7@tarantool.org \
    --to=sergepetrenko@tarantool.org \
    --cc=tarantool-patches@freelists.org \
    --cc=vdavydov.dev@gmail.com \
    --subject='Re: [tarantool-patches] [PATCH] lua: fix assertion failure after improper box.schema.user:passwd() call' \
    /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