From: jacob Date: Tue, 18 Aug 2009 23:38:48 +0000 (+0000) Subject: Fix handling of duplicate port forwardings; they were effectively cancelling X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/commitdiff_plain/c00c193154b8922d3f88a65d341027c54ffdd123?ds=sidebyside Fix handling of duplicate port forwardings; they were effectively cancelling out, but are now just ignored. (We should make more effort to prevent duplicates before they get as far as ssh_setup_portfwd() -- it's currently trivially easy to enter them in the GUI and on the command line, let alone both -- but there's bound to be someone with a saved session containing dupes out there by now, and anyway there are duplicates we can't detect before getting this far, for instance "1234:localhost:22" vs "1234:localhost:ssh".) git-svn-id: svn://svn.tartarus.org/sgt/putty@8623 cda61777-01e9-0310-a592-d414129be87e --- diff --git a/ssh.c b/ssh.c index 0aec421e..23afa6aa 100644 --- a/ssh.c +++ b/ssh.c @@ -4427,12 +4427,19 @@ static void ssh_setup_portfwd(Ssh ssh, const Config *cfg) epfrec = add234(ssh->portfwds, pfrec); if (epfrec != pfrec) { + if (epfrec->status == DESTROY) { + /* + * We already have a port forwarding up and running + * with precisely these parameters. Hence, no need + * to do anything; simply re-tag the existing one + * as KEEP. + */ + epfrec->status = KEEP; + } /* - * We already have a port forwarding with precisely - * these parameters. Hence, no need to do anything; - * simply tag the existing one as KEEP. + * Anything else indicates that there was a duplicate + * in our input, which we'll silently ignore. */ - epfrec->status = KEEP; free_portfwd(pfrec); } else { pfrec->status = CREATE;