diff --git a/phpseclib/Math/BigInteger/Engines/PHP.php b/phpseclib/Math/BigInteger/Engines/PHP.php index 37dfdf22..39c8ac8f 100644 --- a/phpseclib/Math/BigInteger/Engines/PHP.php +++ b/phpseclib/Math/BigInteger/Engines/PHP.php @@ -630,7 +630,9 @@ abstract class PHP extends Engine $temp_value = [$quotient_value[$q_index]]; $temp = $temp->multiply($y); $temp_value = &$temp->value; - $temp_value = array_merge($adjust, $temp_value); + if ($temp_value !== []) { + $temp_value = array_merge($adjust, $temp_value); + } $x = $x->subtract($temp); @@ -736,6 +738,7 @@ abstract class PHP extends Engine $value = &$result->value; if (!count($value)) { + $result->is_negative = false; return $result; } diff --git a/tests/Unit/Math/BigInteger/TestCase.php b/tests/Unit/Math/BigInteger/TestCase.php index f8697e4e..56d2234d 100644 --- a/tests/Unit/Math/BigInteger/TestCase.php +++ b/tests/Unit/Math/BigInteger/TestCase.php @@ -99,6 +99,22 @@ abstract class Unit_Math_BigInteger_TestCase extends PhpseclibTestCase $this->assertSame('95627922070', (string) $q); $this->assertSame('10688759725', (string) $r); + + $x = $this->getInstance('3369993333393829974333376885877453834204643052817571560137951281152'); + $y = $this->getInstance('4294967296'); + + list($q, $r) = $x->divide($y); + + $this->assertSame('784637716923335095479473677900958302012794430558004314112', (string) $q); + $this->assertSame('0', (string) $r); + + $x = $this->getInstance('3369993333393829974333376885877453834204643052817571560137951281153'); + $y = $this->getInstance('4294967296'); + + list($q, $r) = $x->divide($y); + + $this->assertSame('784637716923335095479473677900958302012794430558004314112', (string) $q); + $this->assertSame('1', (string) $r); } public function testModPow()