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'):