diff --git a/phpseclib/Crypt/RSA.php b/phpseclib/Crypt/RSA.php index fec68958..7f5df1d5 100644 --- a/phpseclib/Crypt/RSA.php +++ b/phpseclib/Crypt/RSA.php @@ -1396,9 +1396,14 @@ class RSA $this->components = array(); $xml = xml_parser_create('UTF-8'); - xml_set_object($xml, $this); - xml_set_element_handler($xml, '_start_element_handler', '_stop_element_handler'); - xml_set_character_data_handler($xml, '_data_handler'); + if (version_compare(PHP_VERSION, '8.4.0', '>=')) { + xml_set_element_handler($xml, array($this, '_start_element_handler'), array($this, '_stop_element_handler')); + xml_set_character_data_handler($xml, array($this, '_data_handler')); + } else { + xml_set_object($xml, $this); + xml_set_element_handler($xml, '_start_element_handler', '_stop_element_handler'); + xml_set_character_data_handler($xml, '_data_handler'); + } // add to account for "dangling" tags like ... that are sometimes added if (!xml_parse($xml, '' . $key . '')) { xml_parser_free($xml); diff --git a/phpseclib/Math/BigInteger.php b/phpseclib/Math/BigInteger.php index 7747a95b..74b54a26 100644 --- a/phpseclib/Math/BigInteger.php +++ b/phpseclib/Math/BigInteger.php @@ -252,7 +252,8 @@ class BigInteger { if (!defined('MATH_BIGINTEGER_MODE')) { switch (true) { - case extension_loaded('gmp'): + // PHP 8.4.0 and 8.4.1 don't work with GMP per https://github.com/php/php-src/issues/16870 + case extension_loaded('gmp') && !(version_compare(PHP_VERSION, '8.4.0', '>=') && version_compare(PHP_VERSION, '8.4.1', '<=')): define('MATH_BIGINTEGER_MODE', self::MODE_GMP); break; case extension_loaded('bcmath'):