X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/038ec85e825fc940c1387f64a88ae73b75f6822b..HEAD:/portfwd.c diff --git a/portfwd.c b/portfwd.c index 97c1cb74..00cff5ee 100644 --- a/portfwd.c +++ b/portfwd.c @@ -87,7 +87,17 @@ static int pfd_closing(Plug plug, const char *error_msg, int error_code, /* * Socket error. Slam the connection instantly shut. */ - sshfwd_unclean_close(pr->c); + if (pr->c) { + sshfwd_unclean_close(pr->c); + } else { + /* + * We might not have an SSH channel, if a socket error + * occurred during SOCKS negotiation. If not, we must + * clean ourself up without sshfwd_unclean_close's call + * back to pfd_close. + */ + pfd_close(pr->s); + } } else { /* * Ordinary EOF received on socket. Send an EOF on the SSH @@ -370,6 +380,7 @@ const char *pfd_newconnect(Socket *s, char *hostname, int port, addr = name_lookup(hostname, port, &dummy_realhost, conf, addressfamily); if ((err = sk_addr_error(addr)) != NULL) { sk_addr_free(addr); + sfree(dummy_realhost); return err; }