Merge branch '4.3' into 4.4

* 4.3:
  [Cache] skip igbinary on PHP 7.4.0
This commit is contained in:
Nicolas Grekas 2019-09-20 16:40:59 +02:00
commit 27a400281c
2 changed files with 17 additions and 5 deletions

View File

@ -25,9 +25,9 @@ class DefaultMarshaller implements MarshallerInterface
public function __construct(bool $useIgbinarySerialize = null) public function __construct(bool $useIgbinarySerialize = null)
{ {
if (null === $useIgbinarySerialize) { if (null === $useIgbinarySerialize) {
$useIgbinarySerialize = \extension_loaded('igbinary'); $useIgbinarySerialize = \extension_loaded('igbinary') && \PHP_VERSION_ID !== 70400;
} elseif ($useIgbinarySerialize && !\extension_loaded('igbinary')) { } elseif ($useIgbinarySerialize && (!\extension_loaded('igbinary') || \PHP_VERSION_ID === 70400)) {
throw new CacheException('The "igbinary" PHP extension is not loaded.'); throw new CacheException('The "igbinary" PHP extension is not '.(\PHP_VERSION_ID === 70400 ? 'compatible with PHP 7.4.0.' : 'loaded.'));
} }
$this->useIgbinarySerialize = $useIgbinarySerialize; $this->useIgbinarySerialize = $useIgbinarySerialize;
} }
@ -66,7 +66,7 @@ class DefaultMarshaller implements MarshallerInterface
return null; return null;
} }
static $igbinaryNull; static $igbinaryNull;
if ($value === ($igbinaryNull ?? $igbinaryNull = \extension_loaded('igbinary') ? igbinary_serialize(null) : false)) { if ($value === ($igbinaryNull ?? $igbinaryNull = \extension_loaded('igbinary') && \PHP_VERSION_ID !== 70400 ? igbinary_serialize(null) : false)) {
return null; return null;
} }
$unserializeCallbackHandler = ini_set('unserialize_callback_func', __CLASS__.'::handleUnserializeCallback'); $unserializeCallbackHandler = ini_set('unserialize_callback_func', __CLASS__.'::handleUnserializeCallback');

View File

@ -24,7 +24,7 @@ class DefaultMarshallerTest extends TestCase
'b' => function () {}, 'b' => function () {},
]; ];
$expected = ['a' => \extension_loaded('igbinary') ? igbinary_serialize(123) : serialize(123)]; $expected = ['a' => \extension_loaded('igbinary') && \PHP_VERSION_ID !== 70400 ? igbinary_serialize(123) : serialize(123)];
$this->assertSame($expected, $marshaller->marshall($values, $failed)); $this->assertSame($expected, $marshaller->marshall($values, $failed));
$this->assertSame(['b'], $failed); $this->assertSame(['b'], $failed);
} }
@ -43,6 +43,10 @@ class DefaultMarshallerTest extends TestCase
*/ */
public function testIgbinaryUnserialize() public function testIgbinaryUnserialize()
{ {
if (\PHP_VERSION_ID === 70400) {
$this->markTestSkipped('igbinary is not compatible with PHP 7.4.0.');
}
$marshaller = new DefaultMarshaller(); $marshaller = new DefaultMarshaller();
$this->assertNull($marshaller->unmarshall(igbinary_serialize(null))); $this->assertNull($marshaller->unmarshall(igbinary_serialize(null)));
$this->assertFalse($marshaller->unmarshall(igbinary_serialize(false))); $this->assertFalse($marshaller->unmarshall(igbinary_serialize(false)));
@ -63,6 +67,10 @@ class DefaultMarshallerTest extends TestCase
*/ */
public function testIgbinaryUnserializeNotFoundClass() public function testIgbinaryUnserializeNotFoundClass()
{ {
if (\PHP_VERSION_ID === 70400) {
$this->markTestSkipped('igbinary is not compatible with PHP 7.4.0.');
}
$this->expectException('DomainException'); $this->expectException('DomainException');
$this->expectExceptionMessage('Class not found: NotExistingClass'); $this->expectExceptionMessage('Class not found: NotExistingClass');
$marshaller = new DefaultMarshaller(); $marshaller = new DefaultMarshaller();
@ -87,6 +95,10 @@ class DefaultMarshallerTest extends TestCase
*/ */
public function testIgbinaryUnserializeInvalid() public function testIgbinaryUnserializeInvalid()
{ {
if (\PHP_VERSION_ID === 70400) {
$this->markTestSkipped('igbinary is not compatible with PHP 7.4.0');
}
$this->expectException('DomainException'); $this->expectException('DomainException');
$this->expectExceptionMessage('igbinary_unserialize_zval: unknown type \'61\', position 5'); $this->expectExceptionMessage('igbinary_unserialize_zval: unknown type \'61\', position 5');
$marshaller = new DefaultMarshaller(); $marshaller = new DefaultMarshaller();