From 418035c404833187f7474c71e0ba06c167b0bcf0 Mon Sep 17 00:00:00 2001 From: terrafrost Date: Sat, 19 Jun 2021 10:14:45 -0500 Subject: [PATCH] SSH2: use weakreference when available to stop memory leak --- phpseclib/Net/SSH2.php | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/phpseclib/Net/SSH2.php b/phpseclib/Net/SSH2.php index 7da287af..ff6c93e3 100644 --- a/phpseclib/Net/SSH2.php +++ b/phpseclib/Net/SSH2.php @@ -1123,7 +1123,7 @@ class SSH2 31 => 'NET_SSH2_MSG_KEX_ECDH_REPLY'] ); - self::$connections[$this->getResourceId()] = $this; + self::$connections[$this->getResourceId()] = class_exists('WeakReference') ? \WeakReference::create($this) : $this; if (is_resource($host)) { $this->fsock = $host; @@ -4896,7 +4896,10 @@ class SSH2 */ public static function getConnectionByResourceId($id) { - return isset(self::$connections[$id]) ? self::$connections[$id] : false; + if (isset(self::$connections[$id])) { + return self::$connections[$id] instanceof \WeakReference ? self::$connections[$id]->get() : self::$connections[$id]; + } + return false; } /** @@ -4906,7 +4909,14 @@ class SSH2 */ public static function getConnections() { - return self::$connections; + if (!class_exists('WeakReference')) { + return self::$connections; + } + $temp = []; + foreach (self::$connections as $key=>$ref) { + $temp[$key] = $ref->get(); + } + return $temp; } /*