[Tarantool-patches] [PATCH] lua: assert on lua_gettop() negative return value

Nikita Pettik korablev at tarantool.org
Mon Jul 20 13:50:56 MSK 2020


On 17 Jul 20:25, Ilya Kosarev wrote:
> In case lua_gettop() called from encode_lua_call() returns negative
> value, we will segfault in iproto_reply_error() with empty diag, as far
> as it is unexpected error path not covered with diagnostics. Thus
> corresponding sane check with assert is introduced.
> 
> Closes #4649
> ---
> Branch: https://github.com/tarantool/tarantool/tree/i.kosarev/gh-4649-sane-check-on-lua_gettop
> Issue: https://github.com/tarantool/tarantool/issues/4649
> 
> @ChangeLog:
>  * Raise assert on lua_gettop() negative return value (gh-4649).

I guess changelog is likely to be redundant in this case
(patch doesnt introduce user-visible changes).
 
>  src/box/lua/call.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/src/box/lua/call.c b/src/box/lua/call.c
> index ca871e077..75634de5b 100644
> --- a/src/box/lua/call.c
> +++ b/src/box/lua/call.c
> @@ -361,6 +361,7 @@ encode_lua_call(lua_State *L)
>  
>  	struct luaL_serializer *cfg = luaL_msgpack_default;
>  	int size = lua_gettop(port->L);
> +	assert(size >= 0);

I don't understand much in Lua internals, so it would be nice
to see rationale for this check. Even if you don't have
complete insight concerning it, any thoughts which bring you
to this check will be helpful.

>  	for (int i = 1; i <= size; ++i)
>  		luamp_encode(port->L, cfg, &stream, i);
>  	port->size = size;
> -- 
> 2.17.1
> 


More information about the Tarantool-patches mailing list