bug #13715 Enforce UTF-8 charset for core controllers (WouterJ)
This PR was merged into the 2.3 branch.
Discussion
----------
Enforce UTF-8 charset for core controllers
| Q | A
| ------------- | ---
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | #7532
| License | MIT
| Doc PR | -
See https://github.com/symfony/symfony/issues/7617 and https://github.com/symfony/symfony/pull/7532 for the context of this PR.
Commits
-------
3032014
Enforce UTF-8 charset for core controllers
This commit is contained in:
commit
463b24b27c
@ -51,7 +51,7 @@ class ExceptionController
|
|||||||
|
|
||||||
$code = $exception->getStatusCode();
|
$code = $exception->getStatusCode();
|
||||||
|
|
||||||
return new Response($this->twig->render(
|
return Response::create($this->twig->render(
|
||||||
(string) $this->findTemplate($request, $request->getRequestFormat(), $code, $this->debug),
|
(string) $this->findTemplate($request, $request->getRequestFormat(), $code, $this->debug),
|
||||||
array(
|
array(
|
||||||
'status_code' => $code,
|
'status_code' => $code,
|
||||||
@ -60,7 +60,7 @@ class ExceptionController
|
|||||||
'logger' => $logger,
|
'logger' => $logger,
|
||||||
'currentContent' => $currentContent,
|
'currentContent' => $currentContent,
|
||||||
)
|
)
|
||||||
));
|
))->setCharset('UTF-8');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -39,6 +39,7 @@ class ExceptionControllerTest extends TestCase
|
|||||||
$request->headers->set('X-Php-Ob-Level', 1);
|
$request->headers->set('X-Php-Ob-Level', 1);
|
||||||
|
|
||||||
$controller = new ExceptionController($twig, false);
|
$controller = new ExceptionController($twig, false);
|
||||||
$controller->showAction($request, $flatten);
|
$response = $controller->showAction($request, $flatten);
|
||||||
|
$this->assertEquals('UTF-8', $response->getCharset(), 'Request charset is explicitly set to UTF-8');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -62,16 +62,17 @@ class ExceptionController
|
|||||||
|
|
||||||
$code = $exception->getStatusCode();
|
$code = $exception->getStatusCode();
|
||||||
|
|
||||||
return new Response($this->twig->render(
|
return Response::create(
|
||||||
$template,
|
$this->twig->render($template, array(
|
||||||
array(
|
|
||||||
'status_code' => $code,
|
'status_code' => $code,
|
||||||
'status_text' => Response::$statusTexts[$code],
|
'status_text' => Response::$statusTexts[$code],
|
||||||
'exception' => $exception,
|
'exception' => $exception,
|
||||||
'logger' => null,
|
'logger' => null,
|
||||||
'currentContent' => '',
|
'currentContent' => '',
|
||||||
)
|
)),
|
||||||
), 200, array('Content-Type' => 'text/html'));
|
200,
|
||||||
|
array('Content-Type' => 'text/html')
|
||||||
|
)->setCharset('UTF-8');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -97,10 +98,14 @@ class ExceptionController
|
|||||||
if (!$this->templateExists($template)) {
|
if (!$this->templateExists($template)) {
|
||||||
$handler = new ExceptionHandler();
|
$handler = new ExceptionHandler();
|
||||||
|
|
||||||
return new Response($handler->getStylesheet($exception), 200, array('Content-Type' => 'text/css'));
|
$response = new Response($handler->getStylesheet($exception), 200, array('Content-Type' => 'text/css'));
|
||||||
|
} else {
|
||||||
|
$response = new Response($this->twig->render('@WebProfiler/Collector/exception.css.twig'), 200, array('Content-Type' => 'text/css'));
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Response($this->twig->render('@WebProfiler/Collector/exception.css.twig'), 200, array('Content-Type' => 'text/css'));
|
$response->setCharset('UTF-8');
|
||||||
|
|
||||||
|
return $response;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getTemplate()
|
protected function getTemplate()
|
||||||
|
@ -99,7 +99,8 @@ class ProfilerController
|
|||||||
throw new NotFoundHttpException(sprintf('Panel "%s" is not available for token "%s".', $panel, $token));
|
throw new NotFoundHttpException(sprintf('Panel "%s" is not available for token "%s".', $panel, $token));
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Response($this->twig->render($this->getTemplateManager()->getName($profile, $panel), array(
|
return Response::create(
|
||||||
|
$this->twig->render($this->getTemplateManager()->getName($profile, $panel), array(
|
||||||
'token' => $token,
|
'token' => $token,
|
||||||
'profile' => $profile,
|
'profile' => $profile,
|
||||||
'collector' => $profile->getCollector($panel),
|
'collector' => $profile->getCollector($panel),
|
||||||
@ -108,7 +109,10 @@ class ProfilerController
|
|||||||
'request' => $request,
|
'request' => $request,
|
||||||
'templates' => $this->getTemplateManager()->getTemplates($profile),
|
'templates' => $this->getTemplateManager()->getTemplates($profile),
|
||||||
'is_ajax' => $request->isXmlHttpRequest(),
|
'is_ajax' => $request->isXmlHttpRequest(),
|
||||||
)), 200, array('Content-Type' => 'text/html'));
|
)),
|
||||||
|
200,
|
||||||
|
array('Content-Type' => 'text/html')
|
||||||
|
)->setCharset('UTF-8');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -147,9 +151,13 @@ class ProfilerController
|
|||||||
|
|
||||||
$this->profiler->disable();
|
$this->profiler->disable();
|
||||||
|
|
||||||
return new Response($this->twig->render('@WebProfiler/Profiler/info.html.twig', array(
|
return Response::create(
|
||||||
|
$this->twig->render('@WebProfiler/Profiler/info.html.twig', array(
|
||||||
'about' => $about,
|
'about' => $about,
|
||||||
)), 200, array('Content-Type' => 'text/html'));
|
)),
|
||||||
|
200,
|
||||||
|
array('Content-Type' => 'text/html')
|
||||||
|
)->setCharset('UTF-8');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -197,13 +205,17 @@ class ProfilerController
|
|||||||
// the profiler is not enabled
|
// the profiler is not enabled
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Response($this->twig->render('@WebProfiler/Profiler/toolbar.html.twig', array(
|
return Response::create(
|
||||||
|
$this->twig->render('@WebProfiler/Profiler/toolbar.html.twig', array(
|
||||||
'position' => $position,
|
'position' => $position,
|
||||||
'profile' => $profile,
|
'profile' => $profile,
|
||||||
'templates' => $this->getTemplateManager()->getTemplates($profile),
|
'templates' => $this->getTemplateManager()->getTemplates($profile),
|
||||||
'profiler_url' => $url,
|
'profiler_url' => $url,
|
||||||
'token' => $token,
|
'token' => $token,
|
||||||
)), 200, array('Content-Type' => 'text/html'));
|
)),
|
||||||
|
200,
|
||||||
|
array('Content-Type' => 'text/html')
|
||||||
|
)->setCharset('UTF-8');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -241,7 +253,8 @@ class ProfilerController
|
|||||||
$token = $session->get('_profiler_search_token');
|
$token = $session->get('_profiler_search_token');
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Response($this->twig->render('@WebProfiler/Profiler/search.html.twig', array(
|
return Response::create(
|
||||||
|
$this->twig->render('@WebProfiler/Profiler/search.html.twig', array(
|
||||||
'token' => $token,
|
'token' => $token,
|
||||||
'ip' => $ip,
|
'ip' => $ip,
|
||||||
'method' => $method,
|
'method' => $method,
|
||||||
@ -249,7 +262,10 @@ class ProfilerController
|
|||||||
'start' => $start,
|
'start' => $start,
|
||||||
'end' => $end,
|
'end' => $end,
|
||||||
'limit' => $limit,
|
'limit' => $limit,
|
||||||
)), 200, array('Content-Type' => 'text/html'));
|
)),
|
||||||
|
200,
|
||||||
|
array('Content-Type' => 'text/html')
|
||||||
|
)->setCharset('UTF-8');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -279,7 +295,8 @@ class ProfilerController
|
|||||||
$end = $request->query->get('end', null);
|
$end = $request->query->get('end', null);
|
||||||
$limit = $request->query->get('limit');
|
$limit = $request->query->get('limit');
|
||||||
|
|
||||||
return new Response($this->twig->render('@WebProfiler/Profiler/results.html.twig', array(
|
return Response::create(
|
||||||
|
$this->twig->render('@WebProfiler/Profiler/results.html.twig', array(
|
||||||
'token' => $token,
|
'token' => $token,
|
||||||
'profile' => $profile,
|
'profile' => $profile,
|
||||||
'tokens' => $this->profiler->find($ip, $url, $limit, $method, $start, $end),
|
'tokens' => $this->profiler->find($ip, $url, $limit, $method, $start, $end),
|
||||||
@ -290,7 +307,10 @@ class ProfilerController
|
|||||||
'end' => $end,
|
'end' => $end,
|
||||||
'limit' => $limit,
|
'limit' => $limit,
|
||||||
'panel' => null,
|
'panel' => null,
|
||||||
)), 200, array('Content-Type' => 'text/html'));
|
)),
|
||||||
|
200,
|
||||||
|
array('Content-Type' => 'text/html')
|
||||||
|
)->setCharset('UTF-8');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -364,7 +384,7 @@ class ProfilerController
|
|||||||
phpinfo();
|
phpinfo();
|
||||||
$phpinfo = ob_get_clean();
|
$phpinfo = ob_get_clean();
|
||||||
|
|
||||||
return new Response($phpinfo, 200, array('Content-Type' => 'text/html'));
|
return Response::create($phpinfo, 200, array('Content-Type' => 'text/html'))->setCharset('UTF-8');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -68,10 +68,14 @@ class RouterController
|
|||||||
|
|
||||||
$request = $profile->getCollector('request');
|
$request = $profile->getCollector('request');
|
||||||
|
|
||||||
return new Response($this->twig->render('@WebProfiler/Router/panel.html.twig', array(
|
return Response::create(
|
||||||
|
$this->twig->render('@WebProfiler/Router/panel.html.twig', array(
|
||||||
'request' => $request,
|
'request' => $request,
|
||||||
'router' => $profile->getCollector('router'),
|
'router' => $profile->getCollector('router'),
|
||||||
'traces' => $matcher->getTraces($request->getPathInfo()),
|
'traces' => $matcher->getTraces($request->getPathInfo()),
|
||||||
)), 200, array('Content-Type' => 'text/html'));
|
)),
|
||||||
|
200,
|
||||||
|
array('Content-Type' => 'text/html')
|
||||||
|
)->setCharset('UTF-8');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,6 +69,7 @@ class ProfilerControllerTest extends \PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
$response = $controller->toolbarAction(Request::create('/_wdt/found'), 'found');
|
$response = $controller->toolbarAction(Request::create('/_wdt/found'), 'found');
|
||||||
$this->assertEquals(200, $response->getStatusCode());
|
$this->assertEquals(200, $response->getStatusCode());
|
||||||
|
$this->assertEquals('UTF-8', $response->getCharset(), 'Request charset is explicitly set to UTF-8');
|
||||||
|
|
||||||
$response = $controller->toolbarAction(Request::create('/_wdt/notFound'), 'notFound');
|
$response = $controller->toolbarAction(Request::create('/_wdt/notFound'), 'notFound');
|
||||||
$this->assertEquals(404, $response->getStatusCode());
|
$this->assertEquals(404, $response->getStatusCode());
|
||||||
|
Reference in New Issue
Block a user