зеркало из https://github.com/github/putty.git
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:
Родитель
352ec6a486
Коммит
9601124a7a
6
proxy.c
6
proxy.c
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче