Formatting: Add support for Enums in is_serialized().

This changeset adds support for Enums in `is_serialized()`. It also adds new unit tests for this function.

Props ayeshrajans, konradyoast, peterwilsoncc, costdev, dennisatyoast, mukesh27.
Fixes #53299.


git-svn-id: https://develop.svn.wordpress.org/trunk@53886 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Jb Audras
2022-08-12 09:24:23 +00:00
parent c2e2e55b0d
commit 38037ebb2c
2 changed files with 89 additions and 1 deletions

View File

@@ -657,10 +657,11 @@ function maybe_unserialize( $data ) {
/**
* Check value to find if it was serialized.
*
* If $data is not an string, then returned value will always be false.
* If $data is not a string, then returned value will always be false.
* Serialized data is always a string.
*
* @since 2.0.5
* @since 6.1.0 Added Enum support.
*
* @param string $data Value to check to see if was serialized.
* @param bool $strict Optional. Whether to be strict about the end of the string. Default true.
@@ -714,6 +715,7 @@ function is_serialized( $data, $strict = true ) {
// Or else fall through.
case 'a':
case 'O':
case 'E':
return (bool) preg_match( "/^{$token}:[0-9]+:/s", $data );
case 'b':
case 'i':

View File

@@ -0,0 +1,86 @@
<?php
/**
* Tests for `is_serialized()`.
*
* @ticket 53299
*
* @group functions.php
* @covers ::is_serialized
*/
class Tests_Functions_IsSerialized extends WP_UnitTestCase {
/**
* Run tests on `is_serialized()`.
*
* @dataProvider data_is_serialized
*
* @param mixed $data Data value to test.
* @param bool $expected Expected function result.
*/
public function test_is_serialized_string( $data, $expected ) {
$this->assertSame( $expected, is_serialized( $data ) );
}
/**
* Data provider method for testing `is_serialized()`.
*
* @return array
*/
public function data_is_serialized() {
return array(
'an array' => array(
'data' => array(),
'expected' => false,
),
'an object' => array(
'data' => new stdClass(),
'expected' => false,
),
'a boolean false' => array(
'data' => false,
'expected' => false,
),
'a boolean true' => array(
'data' => true,
'expected' => false,
),
'an integer 0' => array(
'data' => 0,
'expected' => false,
),
'an integer 1' => array(
'data' => 1,
'expected' => false,
),
'a float 0.0' => array(
'data' => 0.0,
'expected' => false,
),
'a float 1.0' => array(
'data' => 1.0,
'expected' => false,
),
'string that is too short' => array(
'data' => 's:3',
'expected' => false,
),
'not a colon in second position' => array(
'data' => 's!3:"foo";',
'expected' => false,
),
'no trailing semicolon (strict check)' => array(
'data' => 's:3:"foo"',
'expected' => false,
),
'valid serialized null' => array(
'data' => 'N;',
'expected' => true,
),
'valid serialized Enum' => array(
'data' => 'E:7:"Foo:bar";',
'expected' => true,
),
);
}
}