From 17af65c78c2e754647f37cf0599b6bced213d7c6 Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Wed, 27 Mar 2002 21:58:11 +0000 Subject: [PATCH] Remember to wait for SSH1_MSG_SUCCESS after enabling remote port forwardings in SSH1. Was causing several MSG_SUCCESS to be queued up unread, which was wrong-but-benign in most cases but caused a hard crash with compression enabled (one of those uncompressed MSG_SUCCESSes was fed to the zlib decompressor with spectacular results). [originally from svn r1609] --- ssh.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/ssh.c b/ssh.c index 6a653e5e..c05abe28 100644 --- a/ssh.c +++ b/ssh.c @@ -2831,7 +2831,8 @@ static void ssh1_protocol(unsigned char *in, int inlen, int ispkt) } { - char type, *e; + char type; + static char *e; int n; int sport,dport,sserv,dserv; char sports[256], dports[256], host[256]; @@ -2924,6 +2925,18 @@ static void ssh1_protocol(unsigned char *in, int inlen, int ispkt) PKT_STR, host, PKT_INT, dport, PKT_END); + do { + crReturnV; + } while (!ispkt); + if (pktin.type != SSH1_SMSG_SUCCESS + && pktin.type != SSH1_SMSG_FAILURE) { + bombout(("Protocol confusion")); + crReturnV; + } else if (pktin.type == SSH1_SMSG_FAILURE) { + c_write_str("Server refused port forwarding\r\n"); + ssh_editing = ssh_echoing = 1; + } + logevent("Remote port forwarding enabled"); } } }