8000 skip native serialize among child and parent serializable objects · devloop42/symfony@10256fc · GitHub
[go: up one dir, main page]

Skip to content

Commit 10256fc

Browse files
Renannicolas-grekas
Renan
authored andcommitted
skip native serialize among child and parent serializable objects
1 parent 41000f1 commit 10256fc

12 files changed

+61
-32
lines changed

src/Symfony/Component/Security/Core/Authentication/Token/AbstractToken.php

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,10 +134,6 @@ public function eraseCredentials()
134134

135135
/**
136136
* {@inheritdoc}
137-
*
138-
* @param bool $isCalledFromOverridingMethod Must be set to true when called from an overriding method
139-
*
140-
* @return string|array Returns an array when $isCalledFromOverridingMethod is set to true
141137
*/
142138
public function serialize()
143139
{

src/Symfony/Component/Security/Core/Authentication/Token/AnonymousToken.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ public function getSecret()
5959
*/
6060
public function serialize()
6161
{
62-
return serialize([$this->secret, parent::serialize()]);
62+
$serialized = [$this->secret, parent::serialize(true)];
63+
64+
return $this->doSerialize($serialized, \func_num_args() ? \func_get_arg(0) : null);
6365
}
6466

6567
/**

src/Symfony/Component/Security/Core/Authentication/Token/PreAuthenticatedToken.php

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,6 @@ public function eraseCredentials()
7676

7777
/**
7878
* {@inheritdoc}
79-
*
80 8000 -
* @param bool $isCalledFromOverridingMethod Must be set to true when called from an overriding method
8179
*/
8280
public function serialize()
8381
{

src/Symfony/Component/Security/Core/Authentication/Token/RememberMeToken.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,9 @@ public function getCredentials()
9494
*/
9595
public function serialize()
9696
{
97-
return serialize([
98-
$this->secret,
99-
$this->providerKey,
100-
parent::serialize(),
101-
]);
97+
$serialized = [$this->secret, $this->providerKey, parent::serialize(true)];
98+
99+
return $this->doSerialize($serialized, \func_num_args() ? \func_get_arg(0) : null);
102100
}
103101

104102
/**

src/Symfony/Component/Security/Core/Authentication/Token/UsernamePasswordToken.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,9 @@ public function eraseCredentials()
9191
*/
9292
public function serialize()
9393
{
94-
return serialize([$this->credentials, $this->providerKey, parent::serialize()]);
94+
$serialized = [$this->credentials, $this->providerKey, parent::serialize(true)];
95+
96+
return $this->doSerialize($serialized, \func_num_args() ? \func_get_arg(0) : null);
9597
}
9698

9799
/**

src/Symfony/Component/Security/Core/Exception/AccountStatusException.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,9 @@ public function setUser(UserInterface $user)
4444
*/
4545
public function serialize()
4646
{
47-
return serialize([
48-
$this->user,
49-
parent::serialize(),
50-
]);
47+
$serialized = [$this->user, parent::serialize(true)];
48+
49+
return $this->doSerialize($serialized, \func_num_args() ? \func_get_arg(0) : null);
5150
}
5251

5352
/**

src/Symfony/Component/Security/Core/Exception/AuthenticationException.php

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,33 @@ public function setToken(TokenInterface $token)
3838
$this->token = $token;
3939
}
4040

41+
/**
42+
* {@inheritdoc}
43+
*/
4144
public function serialize()
4245
{
43-
return serialize([
46+
$serialized = [
4447
$this->token,
4548
$this->code,
4649
$this->message,
4750
$this->file,
4851
$this->line,
49-
]);
52+
];
53+
54+
return $this->doSerialize($serialized, \func_num_args() ? \func_get_arg(0) : null);
55+
}
56+
57+
/**
58+
* @internal
59+
*/
60+
protected function doSerialize($serialized, $isCalledFromOverridingMethod)
61+
{
62+
if (null === $isCalledFromOverridingMethod) {
63+
$trace = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, 3);
64+
$isCalledFromOverridingMethod = isset($trace[2]['function'], $trace[2]['object']) && 'serialize' === $trace[2]['function'] && $this === $trace[2]['object'];
65+
}
66+
67+
return $isCalledFromOverridingMethod ? $serialized : serialize($serialized);
5068
}
5169

5270
public function unserialize($str)
@@ -57,7 +75,7 @@ public function unserialize($str)
5775
$this->message,
5876
$this->file,
5977
$this->line
60-
) = unserialize($str);
78+
) = \is_array($str) ? $str : unserialize($str);
6179
}
6280

6381
/**

src/Symfony/Component/Security/Core/Exception/CustomUserMessageAuthenticationException.php

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,9 @@ public function getMessageData()
6060
*/
6161
public function serialize()
6262
{
63-
return serialize([
64-
parent::serialize(),
65-
$this->messageKey,
66-
$this->messageData,
67-
]);
63+
return serialize([parent::serialize(true), $this->messageKey, $this->messageData]);
64+
65+
return $this->doSerialize($serialized, \func_num_args() ? \func_get_arg(0) : null);
6866
}
6967

7068
/**

src/Symfony/Component/Security/Core/Exception/UsernameNotFoundException.php

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,9 @@ public function setUsername($username)
5454
*/
5555
public function serialize()
5656
{
57-
return serialize([
58-
$this->username,
59-
parent::serialize(),
60-
]);
57+
$serialized = [$this->username, parent::serialize(true)];
58+
59+
return $this->doSerialize($serialized, \func_num_args() ? \func_get_arg(0) : null);
6160
}
6261

6362
/**

src/Symfony/Component/Security/Core/Tests/Authentication/Token/AbstractTokenTest.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,13 @@ public function __construct($user, array $roles = [])
4444
}
4545

4646
/**
47-
* @param bool $isCalledFromOverridingMethod Must be set to true when called from an overriding method
47+
* {@inheritdoc}
4848
*/
4949
public function serialize()
5050
{
51-
return serialize([$this->credentials, parent::serialize()]);
51+
$serialized = [$this->credentials, parent::serialize(true)];
52+
53+
return $this->doSerialize($serialized, \func_num_args() ? \func_get_arg(0) : null);
5254
}
5355

5456
public function unserialize($serialized)

src/Symfony/Component/Security/Core/Tests/Exception/CustomUserMessageAuthenticationExceptionTest.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\Component\Security\Core\Tests\Exception;
1313

1414
use PHPUnit\Framework\TestCase;
15+
use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken;
1516
use Symfony\Component\Security\Core\Exception\CustomUserMessageAuthenticationException;
1617

1718
class CustomUserMessageAuthenticationExceptionTest extends TestCase
@@ -24,4 +25,18 @@ public function testConstructWithSAfeMessage()
2425
$this->assertEquals(['foo' => true], $e->getMessageData());
2526
$this->assertEquals('SAFE MESSAGE', $e->getMessage());
2627
}
28+
29+
public function testSharedSerializedData()
30+
{
31+
$token = new AnonymousToken('foo', 'bar');
32+
33+
$exception = new CustomUserMessageAuthenticationException();
34+
$exception->setToken($token);
35+
$exception->setSafeMessage('message', ['token' => $token]);
36+
37+
$processed = unserialize(serialize($exception));
38+
$this->assertEquals($token, $processed->getToken());
39+
$this->assertEquals($token, $processed->getMessageData()['token']);
40+
$this->assertSame($processed->getToken(), $processed->getMessageData()['token']);
41+
}
2742
}

src/Symfony/Component/Security/Guard/Token/PostAuthenticationGuardToken.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,9 @@ public function getProviderKey()
7676
*/
7777
public function serialize()
7878
{
79-
return serialize([$this->providerKey, parent::serialize(true)]);
79+
$serialized = [$this->providerKey, parent::serialize(true)];
80+
81+
return $this->doSerialize($serialized, \func_num_args() ? \func_get_arg(0) : null);
8082
}
8183

8284
/**

0 commit comments

Comments
 (0)
0