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

Appearance settings

Commit 63b57fd

Browse filesBrowse files
committed
Allow disabling debug content in debug mode (preview mode)
1 parent a7852c0 commit 63b57fd
Copy full SHA for 63b57fd

File tree

8 files changed

+203
-23
lines changed
Filter options

8 files changed

+203
-23
lines changed

‎src/Symfony/Component/ErrorRenderer/ErrorRenderer/HtmlErrorRenderer.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/ErrorRenderer/ErrorRenderer/HtmlErrorRenderer.php
+6-3Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,11 @@ public function getBody(FlattenException $exception): string
8080
*
8181
* @internal
8282
*/
83-
public function getStylesheet(): string
83+
public function getStylesheet(FlattenException $exception): string
8484
{
85-
if (!$this->debug) {
85+
$debug = $this->debug && ($exception->getHeaders()['X-Debug'] ?? true);
86+
87+
if (!$debug) {
8688
return $this->include('assets/css/error.css');
8789
}
8890

@@ -91,10 +93,11 @@ public function getStylesheet(): string
9193

9294
private function renderException(FlattenException $exception, string $debugTemplate = 'views/exception_full.html.php'): string
9395
{
96+
$debug = $this->debug && ($exception->getHeaders()['X-Debug'] ?? true);
9497
$statusText = $this->escape($exception->getTitle());
9598
$statusCode = $this->escape($exception->getStatusCode());
9699

97-
if (!$this->debug) {
100+
if (!$debug) {
98101
return $this->include('views/error.html.php', [
99102
'statusText' => $statusText,
100103
'statusCode' => $statusCode,

‎src/Symfony/Component/ErrorRenderer/ErrorRenderer/JsonErrorRenderer.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/ErrorRenderer/ErrorRenderer/JsonErrorRenderer.php
+3-1Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,14 @@ public static function getFormat(): string
3838
*/
3939
public function render(FlattenException $exception): string
4040
{
41+
$debug = $this->debug && ($exception->getHeaders()['X-Debug'] ?? true);
42+
4143
$content = [
4244
'title' => $exception->getTitle(),
4345
'status' => $exception->getStatusCode(),
4446
'detail' => $exception->getMessage(),
4547
];
46-
if ($this->debug) {
48+
if ($debug) {
4749
$content['exceptions'] = $exception->toArray();
4850
}
4951

‎src/Symfony/Component/ErrorRenderer/ErrorRenderer/TxtErrorRenderer.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/ErrorRenderer/ErrorRenderer/TxtErrorRenderer.php
+2-1Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,12 @@ public static function getFormat(): string
3838
*/
3939
public function render(FlattenException $exception): string
4040
{
41+
$debug = $this->debug && ($exception->getHeaders()['X-Debug'] ?? true);
4142
$content = sprintf("[title] %s\n", $exception->getTitle());
4243
$content .= sprintf("[status] %s\n", $exception->getStatusCode());
4344
$content .= sprintf("[detail] %s\n", $exception->getMessage());
4445

45-
if ($this->debug) {
46+
if ($debug) {
4647
foreach ($exception->toArray() as $i => $e) {
4748
$content .= sprintf("[%d] %s: %s\n", $i + 1, $e['class'], $e['message']);
4849
foreach ($e['trace'] as $trace) {

‎src/Symfony/Component/ErrorRenderer/ErrorRenderer/XmlErrorRenderer.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/ErrorRenderer/ErrorRenderer/XmlErrorRenderer.php
+2-1Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,14 @@ public static function getFormat(): string
4040
*/
4141
public function render(FlattenException $exception): string
4242
{
43+
$debug = $this->debug && ($exception->getHeaders()['X-Debug'] ?? true);
4344
$title = $this->escapeXml($exception->getTitle());
4445
$message = $this->escapeXml($exception->getMessage());
4546
$statusCode = $this->escapeXml($exception->getStatusCode());
4647
$charset = $this->escapeXml($this->charset);
4748

4849
$exceptions = '';
49-
if ($this->debug) {
50+
if ($debug) {
5051
$exceptions .= '<exceptions>';
5152
foreach ($exception->toArray() as $e) {
5253
$exceptions .= sprintf('<exception class="%s" message="%s"><traces>', $e['class'], $this->escapeXml($e['message']));

‎src/Symfony/Component/ErrorRenderer/Tests/ErrorRenderer/HtmlErrorRendererTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/ErrorRenderer/Tests/ErrorRenderer/HtmlErrorRendererTest.php
+48-4Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,60 @@
1212
namespace Symfony\Component\ErrorRenderer\Tests\ErrorRenderer;
1313

1414
use PHPUnit\Framework\TestCase;
15+
use Symfony\Component\ErrorRenderer\ErrorRenderer\ErrorRendererInterface;
1516
use Symfony\Component\ErrorRenderer\ErrorRenderer\HtmlErrorRenderer;
1617
use Symfony\Component\ErrorRenderer\Exception\FlattenException;
1718

1819
class HtmlErrorRendererTest extends TestCase
1920
{
20-
public function testRender()
21+
/**
22+
* @dataProvider getRenderData
23+
*/
24+
public function testRender(FlattenException $exception, ErrorRendererInterface $errorRenderer, string $expected)
2125
{
22-
$exception = FlattenException::createFromThrowable(new \RuntimeException('Foo'));
23-
$expected = '<!-- Foo (500 Internal Server Error) -->%A<!DOCTYPE html>%A<html lang="en">%A<title>Foo (500 Internal Server Error)</title>%A<!-- Foo (500 Internal Server Error) -->';
26+
$this->assertStringMatchesFormat($expected, $errorRenderer->render($exception));
27+
}
28+
29+
public function getRenderData()
30+
{
31+
$expectedDebug = <<<HTML
32+
<!-- Foo (500 Internal Server Error) -->
33+
<!DOCTYPE html>
34+
<html lang="en">
35+
%A<title>Foo (500 Internal Server Error)</title>
36+
%A<div class="trace trace-as-html" id="trace-box-1">%A
37+
<!-- Foo (500 Internal Server Error) -->
38+
HTML;
39+
40+
$expectedNonDebug = <<<HTML
41+
<!DOCTYPE html>
42+
<html>
43+
%A<title>An Error Occurred: Internal Server Error</title>
44+
%A<h2>The server returned a "500 Internal Server Error".</h2>%A
45+
HTML;
46+
47+
yield '->render() returns the HTML content WITH stack traces in debug mode' => [
48+
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
49+
new HtmlErrorRenderer(true),
50+
$expectedDebug
51+
];
52+
53+
yield '->render() returns the HTML content WITHOUT stack traces in non-debug mode' => [
54+
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
55+
new HtmlErrorRenderer(false),
56+
$expectedNonDebug
57+
];
58+
59+
yield '->render() returns the HTML content WITHOUT stack traces in debug mode FORCING non-debug via X-Debug header' => [
60+
FlattenException::createFromThrowable(new \RuntimeException('Foo'), null, ['X-Debug' => false]),
61+
new HtmlErrorRenderer(true),
62+
$expectedNonDebug
63+
];
2464

25-
$this->assertStringMatchesFormat($expected, (new HtmlErrorRenderer(true))->render($exception));
65+
yield '->render() returns the HTML content WITHOUT stack traces in non-debug mode EVEN FORCING debug via X-Debug header' => [
66+
FlattenException::createFromThrowable(new \RuntimeException('Foo'), null, ['X-Debug' => true]),
67+
new HtmlErrorRenderer(false),
68+
$expectedNonDebug
69+
];
2670
}
2771
}

‎src/Symfony/Component/ErrorRenderer/Tests/ErrorRenderer/JsonErrorRendererTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/ErrorRenderer/Tests/ErrorRenderer/JsonErrorRendererTest.php
+44-5Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,23 @@
1212
namespace Symfony\Component\ErrorRenderer\Tests\ErrorRenderer;
1313

1414
use PHPUnit\Framework\TestCase;
15+
use Symfony\Component\ErrorRenderer\ErrorRenderer\ErrorRendererInterface;
1516
use Symfony\Component\ErrorRenderer\ErrorRenderer\JsonErrorRenderer;
1617
use Symfony\Component\ErrorRenderer\Exception\FlattenException;
1718

1819
class JsonErrorRendererTest extends TestCase
1920
{
20-
public function testRender()
21+
/**
22+
* @dataProvider getRenderData
23+
*/
24+
public function testRender(FlattenException $exception, ErrorRendererInterface $errorRenderer, string $expected)
2125
{
22-
$exception = FlattenException::createFromThrowable(new \RuntimeException('Foo'));
23-
$expected = <<<JSON
26+
$this->assertStringMatchesFormat($expected, $errorRenderer->render($exception));
27+
}
28+
29+
public function getRenderData()
30+
{
31+
$expectedDebug = <<<JSON
2432
{
2533
"title": "Internal Server Error",
2634
"status": 500,
@@ -29,9 +37,40 @@ public function testRender()
2937
{
3038
"message": "Foo",
3139
"class": "RuntimeException",
32-
"trace":
40+
"trace": [
41+
%A
42+
JSON;
43+
44+
$expectedNonDebug = <<<JSON
45+
{
46+
"title": "Internal Server Error",
47+
"status": 500,
48+
"detail": "Foo"
49+
}
3350
JSON;
3451

35-
$this->assertStringStartsWith($expected, (new JsonErrorRenderer(true))->render($exception));
52+
yield '->render() returns the JSON content WITH stack traces in debug mode' => [
53+
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
54+
new JsonErrorRenderer(true),
55+
$expectedDebug
56+
];
57+
58+
yield '->render() returns the JSON content WITHOUT stack traces in non-debug mode' => [
59+
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
60+
new JsonErrorRenderer(false),
61+
$expectedNonDebug
62+
];
63+
64+
yield '->render() returns the JSON content WITHOUT stack traces in debug mode FORCING non-debug via X-Debug header' => [
65+
FlattenException::createFromThrowable(new \RuntimeException('Foo'), null, ['X-Debug' => false]),
66+
new JsonErrorRenderer(true),
67+
$expectedNonDebug
68+
];
69+
70+
yield '->render() returns the JSON content WITHOUT stack traces in non-debug mode EVEN FORCING debug via X-Debug header' => [
71+
FlattenException::createFromThrowable(new \RuntimeException('Foo'), null, ['X-Debug' => true]),
72+
new JsonErrorRenderer(false),
73+
$expectedNonDebug
74+
];
3675
}
3776
}

‎src/Symfony/Component/ErrorRenderer/Tests/ErrorRenderer/TxtErrorRendererTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/ErrorRenderer/Tests/ErrorRenderer/TxtErrorRendererTest.php
+46-4Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,58 @@
1212
namespace Symfony\Component\ErrorRenderer\Tests\ErrorRenderer;
1313

1414
use PHPUnit\Framework\TestCase;
15+
use Symfony\Component\ErrorRenderer\ErrorRenderer\ErrorRendererInterface;
1516
use Symfony\Component\ErrorRenderer\ErrorRenderer\TxtErrorRenderer;
1617
use Symfony\Component\ErrorRenderer\Exception\FlattenException;
1718

1819
class TxtErrorRendererTest extends TestCase
1920
{
20-
public function testRender()
21+
/**
22+
* @dataProvider getRenderData
23+
*/
24+
public function testRender(FlattenException $exception, ErrorRendererInterface $errorRenderer, string $expected)
2125
{
22-
$exception = FlattenException::createFromThrowable(new \RuntimeException('Foo'));
23-
$expected = '[title] Internal Server Error%A[status] 500%A[detail] Foo%A[1] RuntimeException: Foo%A';
26+
$this->assertStringMatchesFormat($expected, $errorRenderer->render($exception));
27+
}
28+
29+
public function getRenderData()
30+
{
31+
$expectedDebug = <<<TXT
32+
[title] Internal Server Error
33+
[status] 500
34+
[detail] Foo
35+
[1] RuntimeException: Foo
36+
in %A
37+
TXT;
38+
39+
$expectedNonDebug = <<<TXT
40+
[title] Internal Server Error
41+
[status] 500
42+
[detail] Foo
43+
TXT;
44+
45+
yield '->render() returns the TXT content WITH stack traces in debug mode' => [
46+
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
47+
new TxtErrorRenderer(true),
48+
$expectedDebug
49+
];
50+
51+
yield '->render() returns the TXT content WITHOUT stack traces in non-debug mode' => [
52+
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
53+
new TxtErrorRenderer(false),
54+
$expectedNonDebug
55+
];
56+
57+
yield '->render() returns the TXT content WITHOUT stack traces in debug mode FORCING non-debug via X-Debug header' => [
58+
FlattenException::createFromThrowable(new \RuntimeException('Foo'), null, ['X-Debug' => false]),
59+
new TxtErrorRenderer(true),
60+
$expectedNonDebug
61+
];
2462

25-
$this->assertStringMatchesFormat($expected, (new TxtErrorRenderer(true))->render($exception));
63+
yield '->render() returns the TXT content WITHOUT stack traces in non-debug mode EVEN FORCING debug via X-Debug header' => [
64+
FlattenException::createFromThrowable(new \RuntimeException('Foo'), null, ['X-Debug' => true]),
65+
new TxtErrorRenderer(false),
66+
$expectedNonDebug
67+
];
2668
}
2769
}

‎src/Symfony/Component/ErrorRenderer/Tests/ErrorRenderer/XmlErrorRendererTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/ErrorRenderer/Tests/ErrorRenderer/XmlErrorRendererTest.php
+52-4Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,64 @@
1212
namespace Symfony\Component\ErrorRenderer\Tests\ErrorRenderer;
1313

1414
use PHPUnit\Framework\TestCase;
15+
use Symfony\Component\ErrorRenderer\ErrorRenderer\ErrorRendererInterface;
1516
use Symfony\Component\ErrorRenderer\ErrorRenderer\XmlErrorRenderer;
1617
use Symfony\Component\ErrorRenderer\Exception\FlattenException;
1718

1819
class XmlErrorRendererTest extends TestCase
1920
{
20-
public function testRender()
21+
/**
22+
* @dataProvider getRenderData
23+
*/
24+
public function testRender(FlattenException $exception, ErrorRendererInterface $errorRenderer, string $expected)
2125
{
22-
$exception = FlattenException::createFromThrowable(new \RuntimeException('Foo'));
23-
$expected = '<?xml version="1.0" encoding="UTF-8" ?>%A<problem xmlns="urn:ietf:rfc:7807">%A<title>Internal Server Error</title>%A<status>500</status>%A<detail>Foo</detail>%A';
26+
$this->assertStringMatchesFormat($expected, $errorRenderer->render($exception));
27+
}
28+
29+
public function getRenderData()
30+
{
31+
$expectedDebug = <<<XML
32+
<?xml version="1.0" encoding="UTF-8" ?>
33+
<problem xmlns="urn:ietf:rfc:7807">
34+
<title>Internal Server Error</title>
35+
<status>500</status>
36+
<detail>Foo</detail>
37+
<exceptions><exception class="RuntimeException" message="Foo"><traces><trace>%A</trace></traces></exception></exceptions>
38+
</problem>
39+
XML;
40+
41+
$expectedNonDebug = <<<XML
42+
<?xml version="1.0" encoding="UTF-8" ?>
43+
<problem xmlns="urn:ietf:rfc:7807">
44+
<title>Internal Server Error</title>
45+
<status>500</status>
46+
<detail>Foo</detail>
47+
48+
</problem>
49+
XML;
50+
51+
yield '->render() returns the XML content WITH stack traces in debug mode' => [
52+
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
53+
new XmlErrorRenderer(true),
54+
$expectedDebug
55+
];
56+
57+
yield '->render() returns the XML content WITHOUT stack traces in non-debug mode' => [
58+
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
59+
new XmlErrorRenderer(false),
60+
$expectedNonDebug
61+
];
62+
63+
yield '->render() returns the XML content WITHOUT stack traces in debug mode FORCING non-debug via X-Debug header' => [
64+
FlattenException::createFromThrowable(new \RuntimeException('Foo'), null, ['X-Debug' => false]),
65+
new XmlErrorRenderer(true),
66+
$expectedNonDebug
67+
];
2468

25-
$this->assertStringMatchesFormat($expected, (new XmlErrorRenderer(true))->render($exception));
69+
yield '->render() returns the XML content WITHOUT stack traces in non-debug mode EVEN FORCING debug via X-Debug header' => [
70+
FlattenException::createFromThrowable(new \RuntimeException('Foo'), null, ['X-Debug' => true]),
71+
new XmlErrorRenderer(false),
72+
$expectedNonDebug
73+
];
2674
}
2775
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.