Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc3e30eb

Browse files
committed
Fix fingerprint when context is not serializable
1 parent756522e commitc3e30eb

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

‎src/Symfony/Bridge/Twig/Mime/BodyRenderer.php‎

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public function render(Message $message): void
4949

5050
$previousRenderingKey =$messageContext[__CLASS__] ??null;
5151
unset($messageContext[__CLASS__]);
52-
$currentRenderingKey =md5(serialize([$messageContext,$message->getTextTemplate(),$message->getHtmlTemplate()]));
52+
$currentRenderingKey =$this->getFingerPrint($message);
5353
if ($previousRenderingKey ===$currentRenderingKey) {
5454
return;
5555
}
@@ -77,6 +77,23 @@ public function render(Message $message): void
7777
$message->context($message->getContext() + [__CLASS__ =>$currentRenderingKey]);
7878
}
7979

80+
privatefunctiongetFingerPrint(TemplatedEmail$message):string
81+
{
82+
$messageContext =$message->getContext();
83+
unset($messageContext[__CLASS__]);
84+
85+
$payload = [$messageContext,$message->getTextTemplate(),$message->getHtmlTemplate()];
86+
try {
87+
$serialized =serialize($payload);
88+
}catch (\Exception$e) {
89+
// Serialization of 'Closure' is not allowed
90+
// Happens when context contain a closure, in that case, we assume that context always change.
91+
$serialized =random_bytes(8);
92+
}
93+
94+
returnmd5($serialized);
95+
}
96+
8097
privatefunctionconvertHtmlToText(string$html):string
8198
{
8299
if (null !==$this->converter) {

‎src/Symfony/Bridge/Twig/Tests/Mime/BodyRendererTest.php‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,27 @@ public function testRenderedOnce()
100100
$this->assertEquals('reset',$email->getTextBody());
101101
}
102102

103+
publicfunctiontestRenderedOnceUnserializableContext()
104+
{
105+
$twig =newEnvironment(newArrayLoader([
106+
'text' =>'Text',
107+
]));
108+
$renderer =newBodyRenderer($twig);
109+
$email = (newTemplatedEmail())
110+
->to('fabien@symfony.com')
111+
->from('helene@symfony.com')
112+
;
113+
$email->textTemplate('text');
114+
$email->context([
115+
'foo' =>staticfunction () {
116+
return'bar';
117+
},
118+
]);
119+
120+
$renderer->render($email);
121+
$this->assertEquals('Text',$email->getTextBody());
122+
}
123+
103124
privatefunctionprepareEmail(?string$text, ?string$html,array$context = []):TemplatedEmail
104125
{
105126
$twig =newEnvironment(newArrayLoader([

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp