Skip to content

Commit 52c91d1

Browse files
authored
Fix #49: Fix JSON rendering of non-UTF-8 encoded string
1 parent 3ebf159 commit 52c91d1

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed

CHANGELOG.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
# Yii Error Handler Change Log
22

3-
43
## 2.0.1 under development
54

6-
- no changes in this release.
5+
- Bug #49: Fix JSON rendering of non-UTF-8 encoded string (devanych)
76

87
## 2.0.0 November 09, 2021
98

src/Renderer/JsonRenderer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,6 @@ public function renderVerbose(Throwable $t, ServerRequestInterface $request = nu
3333
'file' => $t->getFile(),
3434
'line' => $t->getLine(),
3535
'trace' => $t->getTrace(),
36-
], JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
36+
], JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_INVALID_UTF8_SUBSTITUTE));
3737
}
3838
}

tests/Renderer/JsonRendererTest.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
use Yiisoft\ErrorHandler\Renderer\JsonRenderer;
1010

1111
use function json_encode;
12+
use function md5;
13+
use function pack;
1214

1315
final class JsonRendererTest extends TestCase
1416
{
@@ -36,4 +38,21 @@ public function testRenderVerbose(): void
3638

3739
$this->assertSame($content, (string) $data);
3840
}
41+
42+
public function testRenderVerboseWithNotUtf8String(): void
43+
{
44+
$renderer = new JsonRenderer();
45+
$throwable = new RuntimeException(pack('H*', md5('binary string')));
46+
$data = $renderer->renderVerbose($throwable);
47+
$content = json_encode([
48+
'type' => RuntimeException::class,
49+
'message' => $throwable->getMessage(),
50+
'code' => $throwable->getCode(),
51+
'file' => $throwable->getFile(),
52+
'line' => $throwable->getLine(),
53+
'trace' => $throwable->getTrace(),
54+
], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_INVALID_UTF8_SUBSTITUTE);
55+
56+
$this->assertSame($content, (string) $data);
57+
}
3958
}

0 commit comments

Comments
 (0)