mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-03-04 18:39:37 +00:00
BUG/MEDIUM: lua: the function txn_done() from action wrapper can crash
If an action wrapper stops the processing of the transaction with a txn_done() function, the return code of the action is "continue". So the continue can implies the processing of other like adding headers. However, the HTTP content is flushed and a segfault occurs. This patchs add a flag indicating that the Lua code want to stop the processing, ths flags is forwarded to the haproxy core, and other actions are ignored. Must be backported in 1.6
This commit is contained in:
parent
ab00df6cf6
commit
9bd52d478b
@ -31,6 +31,7 @@ struct stream;
|
||||
#define HLUA_WAKEREQWR 0x00000008
|
||||
#define HLUA_EXIT 0x00000010
|
||||
#define HLUA_MUST_GC 0x00000020
|
||||
#define HLUA_STOP 0x00000040
|
||||
|
||||
#define HLUA_F_AS_STRING 0x01
|
||||
#define HLUA_F_MAY_USE_HTTP 0x02
|
||||
|
@ -4810,10 +4810,12 @@ __LJMP static int hlua_txn_set_mark(lua_State *L)
|
||||
__LJMP static int hlua_txn_done(lua_State *L)
|
||||
{
|
||||
struct hlua_txn *htxn;
|
||||
struct hlua *hlua;
|
||||
struct channel *ic, *oc;
|
||||
|
||||
MAY_LJMP(check_args(L, 1, "close"));
|
||||
htxn = MAY_LJMP(hlua_checktxn(L, 1));
|
||||
hlua = hlua_gethlua(L);
|
||||
|
||||
/* If the flags NOTERM is set, we cannot terminate the http
|
||||
* session, so we just end the execution of the current
|
||||
@ -4857,6 +4859,7 @@ __LJMP static int hlua_txn_done(lua_State *L)
|
||||
|
||||
ic->analysers = 0;
|
||||
|
||||
hlua->flags |= HLUA_STOP;
|
||||
WILL_LJMP(hlua_done(L));
|
||||
return 0;
|
||||
}
|
||||
@ -5555,6 +5558,8 @@ static enum act_return hlua_action(struct act_rule *rule, struct proxy *px,
|
||||
case HLUA_E_OK:
|
||||
if (!hlua_check_proto(s, dir))
|
||||
return ACT_RET_ERR;
|
||||
if (s->hlua.flags & HLUA_STOP)
|
||||
return ACT_RET_STOP;
|
||||
return ACT_RET_CONT;
|
||||
|
||||
/* yield. */
|
||||
|
Loading…
Reference in New Issue
Block a user