From 0c26415f932aedc5b77e9dae39c20e3e45f4b5ad Mon Sep 17 00:00:00 2001 From: terrafrost Date: Fri, 5 Oct 2018 21:27:59 -0500 Subject: [PATCH] SSH2: reset $this->bitmap when the connection fails --- phpseclib/Net/SSH2.php | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/phpseclib/Net/SSH2.php b/phpseclib/Net/SSH2.php index e47d0502..c77988e0 100644 --- a/phpseclib/Net/SSH2.php +++ b/phpseclib/Net/SSH2.php @@ -1221,6 +1221,7 @@ class Net_SSH2 } if (feof($this->fsock)) { + $this->bitmap = 0; user_error('Connection closed by server'); return false; } @@ -1247,6 +1248,7 @@ class Net_SSH2 if (!$this->send_kex_first) { $response = $this->_get_binary_packet(); if ($response === false) { + $this->bitmap = 0; user_error('Connection closed by server'); return false; } @@ -1479,6 +1481,7 @@ class Net_SSH2 $kexinit_payload_server = $this->_get_binary_packet(); if ($kexinit_payload_server === false) { + $this->bitmap = 0; user_error('Connection closed by server'); return false; } @@ -1606,6 +1609,7 @@ class Net_SSH2 $response = $this->_get_binary_packet(); if ($response === false) { + $this->bitmap = 0; user_error('Connection closed by server'); return false; } @@ -1701,12 +1705,14 @@ class Net_SSH2 $data = pack('CNa*', $clientKexInitMessage, strlen($eBytes), $eBytes); if (!$this->_send_binary_packet($data)) { + $this->bitmap = 0; user_error('Connection closed by server'); return false; } $response = $this->_get_binary_packet(); if ($response === false) { + $this->bitmap = 0; user_error('Connection closed by server'); return false; } @@ -1815,6 +1821,7 @@ class Net_SSH2 $response = $this->_get_binary_packet(); if ($response === false) { + $this->bitmap = 0; user_error('Connection closed by server'); return false; } @@ -2284,6 +2291,7 @@ class Net_SSH2 } return $this->_login_helper($username, $password); } + $this->bitmap = 0; user_error('Connection closed by server'); return false; } @@ -2340,6 +2348,7 @@ class Net_SSH2 $response = $this->_get_binary_packet(); if ($response === false) { + $this->bitmap = 0; user_error('Connection closed by server'); return false; } @@ -2398,6 +2407,7 @@ class Net_SSH2 $response = $this->_get_binary_packet(); if ($response === false) { + $this->bitmap = 0; user_error('Connection closed by server'); return false; } @@ -2498,6 +2508,7 @@ class Net_SSH2 } else { $orig = $response = $this->_get_binary_packet(); if ($response === false) { + $this->bitmap = 0; user_error('Connection closed by server'); return false; } @@ -2686,6 +2697,7 @@ class Net_SSH2 $response = $this->_get_binary_packet(); if ($response === false) { + $this->bitmap = 0; user_error('Connection closed by server'); return false; } @@ -2742,6 +2754,7 @@ class Net_SSH2 $response = $this->_get_binary_packet(); if ($response === false) { + $this->bitmap = 0; user_error('Connection closed by server'); return false; } @@ -2868,6 +2881,7 @@ class Net_SSH2 $response = $this->_get_binary_packet(); if ($response === false) { + $this->bitmap = 0; user_error('Connection closed by server'); return false; } @@ -3008,6 +3022,7 @@ class Net_SSH2 $response = $this->_get_binary_packet(); if ($response === false) { + $this->bitmap = 0; user_error('Connection closed by server'); return false; } @@ -3352,8 +3367,8 @@ class Net_SSH2 function _get_binary_packet($skip_channel_filter = false) { if (!is_resource($this->fsock) || feof($this->fsock)) { - user_error('Connection closed prematurely'); $this->bitmap = 0; + user_error('Connection closed prematurely'); return false; } @@ -3396,8 +3411,8 @@ class Net_SSH2 while ($remaining_length > 0) { $temp = fread($this->fsock, $remaining_length); if ($temp === false || feof($this->fsock)) { - user_error('Error reading from socket'); $this->bitmap = 0; + user_error('Error reading from socket'); return false; } $buffer.= $temp; @@ -3415,8 +3430,8 @@ class Net_SSH2 if ($this->hmac_check !== false) { $hmac = fread($this->fsock, $this->hmac_size); if ($hmac === false || strlen($hmac) != $this->hmac_size) { - user_error('Error reading socket'); $this->bitmap = 0; + user_error('Error reading socket'); return false; } elseif ($hmac != $this->hmac_check->hash(pack('NNCa*', $this->get_seq_no, $packet_length, $padding_length, $payload . $padding))) { user_error('Invalid HMAC'); @@ -3724,6 +3739,7 @@ class Net_SSH2 $response = $this->_get_binary_packet(true); if ($response === false) { + $this->bitmap = 0; user_error('Connection closed by server'); return false; }