X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/48683854cb797009e8e72054eb61b7625b30af91..408478526e8140d94dce70528152c5709ff7d53d:/proxy.c?ds=sidebyside diff --git a/proxy.c b/proxy.c index 4a2dd19c..d970b2bf 100644 --- a/proxy.c +++ b/proxy.c @@ -90,6 +90,7 @@ static void sk_proxy_close (Socket s) Proxy_Socket ps = (Proxy_Socket) s; sk_close(ps->sub_socket); + sk_addr_free(ps->remote_addr); sfree(ps); } @@ -160,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 @@ -391,7 +396,7 @@ Socket new_connection(SockAddr addr, char *hostname, ret->fn = &socket_fn_table; ret->cfg = *cfg; /* STRUCTURE COPY */ ret->plug = plug; - ret->remote_addr = addr; + ret->remote_addr = addr; /* will need to be freed on close */ ret->remote_port = port; ret->error = NULL; @@ -443,8 +448,6 @@ Socket new_connection(SockAddr addr, char *hostname, if (sk_socket_error(ret->sub_socket) != NULL) return (Socket) ret; - sk_addr_free(proxy_addr); - /* start the proxy negotiation process... */ sk_set_frozen(ret->sub_socket, 0); ret->negotiate(ret, PROXY_CHANGE_NEW);