mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 22:31:28 +02:00
BUG/MINOR: lua: sockets receive behavior doesn't follows the specs
Specs says that the receive() function with an argument "*l" must return a line without the final "\n" ( or without "\r\n"). This patch removes these two final bytes.
This commit is contained in:
parent
95ad96a7ea
commit
0054392509
25
src/hlua.c
25
src/hlua.c
@ -1169,6 +1169,7 @@ __LJMP static int hlua_socket_receive_yield(struct lua_State *L, int status, lua
|
|||||||
int len1;
|
int len1;
|
||||||
char *blk2;
|
char *blk2;
|
||||||
int len2;
|
int len2;
|
||||||
|
int skip_at_end = 0;
|
||||||
|
|
||||||
/* Check if this lua stack is schedulable. */
|
/* Check if this lua stack is schedulable. */
|
||||||
if (!hlua || !hlua->task)
|
if (!hlua || !hlua->task)
|
||||||
@ -1187,6 +1188,28 @@ __LJMP static int hlua_socket_receive_yield(struct lua_State *L, int status, lua
|
|||||||
goto connection_closed;
|
goto connection_closed;
|
||||||
if (nblk == 0) /* No data avalaible. */
|
if (nblk == 0) /* No data avalaible. */
|
||||||
goto connection_empty;
|
goto connection_empty;
|
||||||
|
|
||||||
|
/* remove final \r\n. */
|
||||||
|
if (nblk == 1) {
|
||||||
|
if (blk1[len1-1] == '\n') {
|
||||||
|
len1--;
|
||||||
|
skip_at_end++;
|
||||||
|
if (blk1[len1-1] == '\r') {
|
||||||
|
len1--;
|
||||||
|
skip_at_end++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (blk2[len2-1] == '\n') {
|
||||||
|
len2--;
|
||||||
|
skip_at_end++;
|
||||||
|
if (blk2[len2-1] == '\r') {
|
||||||
|
len2--;
|
||||||
|
skip_at_end++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (wanted == HLSR_READ_ALL) {
|
else if (wanted == HLSR_READ_ALL) {
|
||||||
@ -1224,7 +1247,7 @@ __LJMP static int hlua_socket_receive_yield(struct lua_State *L, int status, lua
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Consume data. */
|
/* Consume data. */
|
||||||
bo_skip(socket->s->si[0].ob, len);
|
bo_skip(socket->s->si[0].ob, len + skip_at_end);
|
||||||
|
|
||||||
/* Don't wait anything. */
|
/* Don't wait anything. */
|
||||||
si_update(&socket->s->si[0]);
|
si_update(&socket->s->si[0]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user