From 30e159d1128dce98cf3929396c6e50b6c94cf925 Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Sun, 15 Sep 2002 13:31:11 +0000 Subject: [PATCH] Be proactively pedantic about channel-close irregularities: we no longer just sit there like a lemon if we can't find the channel in question, we bomb out and complain. With any luck, remaining problems of this type should be easier to catch under this policy. [originally from svn r1962] --- ssh.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/ssh.c b/ssh.c index a23ead91..3cc76be7 100644 --- a/ssh.c +++ b/ssh.c @@ -3354,7 +3354,7 @@ static void ssh1_protocol(unsigned char *in, int inlen, int ispkt) unsigned i = GET_32BIT(pktin.body); struct ssh_channel *c; c = find234(ssh_channels, &i, ssh_channelfind); - if (c) { + if (c && ((int)c->remoteid) != -1) { int closetype; closetype = (pktin.type == SSH1_MSG_CHANNEL_CLOSE ? 1 : 2); @@ -3383,6 +3383,11 @@ static void ssh1_protocol(unsigned char *in, int inlen, int ispkt) del234(ssh_channels, c); sfree(c); } + } else { + bombout(("Received CHANNEL_CLOSE%s for %s channel %d\n", + pktin.type == SSH1_MSG_CHANNEL_CLOSE ? "" : + "_CONFIRMATION", c ? "half-open" : "nonexistent", + i)); } } else if (pktin.type == SSH1_MSG_CHANNEL_DATA) { /* Data sent down one of our channels. */ @@ -5359,8 +5364,10 @@ static void do_ssh2_authconn(unsigned char *in, int inlen, int ispkt) struct ssh_channel *c; c = find234(ssh_channels, &i, ssh_channelfind); - if (!c) - continue; /* nonexistent channel */ + if (!c || ((int)c->remoteid) == -1) { + bombout(("Received CHANNEL_CLOSE for %s channel %d\n", + c ? "half-open" : "nonexistent", i)); + } /* Do pre-close processing on the channel. */ switch (c->type) { case CHAN_MAINSESSION: