Mark Wutzke points out that the comment in sk_proxy_set_frozen()

states that plug_receive() may recurse back into
sk_proxy_set_frozen() again. Therefore, bufchain_consume() should
have been called _before_ calling plug_receive(), to prevent an
infinite loop overflowing the stack. I can't immediately figure out
under what circumstances this might happen, but it seems an
obviously sensible precaution.

[originally from svn r3741]
This commit is contained in:
Simon Tatham 2004-01-20 19:30:41 +00:00
Родитель 352ec6a486
Коммит 9601124a7a
1 изменённых файлов: 5 добавлений и 1 удалений

Просмотреть файл

@ -161,10 +161,14 @@ static void sk_proxy_set_frozen (Socket s, int is_frozen)
*/
while (!ps->freeze && bufchain_size(&ps->pending_input_data) > 0) {
void *data;
char databuf[512];
int len;
bufchain_prefix(&ps->pending_input_data, &data, &len);
plug_receive(ps->plug, 0, data, len);
if (len > lenof(databuf))
len = lenof(databuf);
memcpy(databuf, data, len);
bufchain_consume(&ps->pending_input_data, len);
plug_receive(ps->plug, 0, databuf, len);
}
/* if we're still frozen, we'll have to wait for another