cc: Haproxy

`hlua_socket_close` expected exactly one argument on stack.
But when it was called from `hlua_socket_write_yield`, it found more than
one argument on stack and threw an error.

This patch introduced new helper function `hlua_socket_close_helper`, which
doesn't check arguments count.
Please let me know if you need more information.

Thanks,
Sada.


On Wed, Apr 25, 2018 at 10:51 AM, Thierry Fournier <tfourn...@arpalert.org>
wrote:

> Hi,
>
> do you have a little bit of context. It is not easy to read a patch without
> the associated explanation.
>
> Thanks,
> Thierry
>
>
>
> On 14 Apr 2018, at 01:56, sada <s...@signalsciences.com> wrote:
>
> ---
> src/hlua.c | 14 ++++++++++----
> 1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/src/hlua.c b/src/hlua.c
> index 60cf8f94..0585a1e7 100644
> --- a/src/hlua.c
> +++ b/src/hlua.c
> @@ -1629,14 +1629,12 @@ __LJMP static int hlua_socket_gc(lua_State *L)
> /* The close function send shutdown signal and break the
> * links between the stream and the object.
> */
> -__LJMP static int hlua_socket_close(lua_State *L)
> +__LJMP static int hlua_socket_close_helper(lua_State *L)
> {
> struct hlua_socket *socket;
> struct appctx *appctx;
> struct xref *peer;
>
> - MAY_LJMP(check_args(L, 1, "close"));
> -
> socket = MAY_LJMP(hlua_checksocket(L, 1));
>
> /* Check if we run on the same thread than the xreator thread.
> @@ -1659,6 +1657,14 @@ __LJMP static int hlua_socket_close(lua_State *L)
> return 0;
> }
>
> +/* The close function calls close_helper.
> + */
> +__LJMP static int hlua_socket_close(lua_State *L)
> +{
> + MAY_LJMP(check_args(L, 1, "close"));
> + return hlua_socket_close_helper(L);
> +}
> +
> /* This Lua function assumes that the stack contain three parameters.
> *  1 - USERDATA containing a struct socket
> *  2 - INTEGER with values of the macro defined below
> @@ -1990,7 +1996,7 @@ static int hlua_socket_write_yield(struct lua_State
> *L,int status, lua_KContext
> if (len == -1)
> s->req.flags |= CF_WAKE_WRITE;
>
> - MAY_LJMP(hlua_socket_close(L));
> + MAY_LJMP(hlua_socket_close_helper(L));
> lua_pop(L, 1);
> lua_pushinteger(L, -1);
> xref_unlock(&socket->xref, peer);
> --
> 2.17.0
>
>
>

Reply via email to