Merge branch '2.3' into 2.4

* 2.3:
  Check headers sent before sending PHP response
  Fixed ACE domain checks on UrlValidator (#10031)
  handle array root element
This commit is contained in:
Fabien Potencier 2014-03-26 19:07:42 +01:00
commit af6d11c9c6
5 changed files with 46 additions and 5 deletions

View File

@ -91,9 +91,11 @@ class ExceptionHandler
$exception = FlattenException::create($exception);
}
header(sprintf('HTTP/1.0 %s', $exception->getStatusCode()));
foreach ($exception->getHeaders() as $name => $value) {
header($name.': '.$value, false);
if (!headers_sent()) {
header(sprintf('HTTP/1.0 %s', $exception->getStatusCode()));
foreach ($exception->getHeaders() as $name => $value) {
header($name.': '.$value, false);
}
}
echo $this->decorate($this->getContent($exception), $this->getStylesheet($exception));

View File

@ -95,7 +95,14 @@ class ConstraintViolation implements ConstraintViolationInterface
*/
public function __toString()
{
$class = (string) (is_object($this->root) ? get_class($this->root) : $this->root);
if (is_object($this->root)) {
$class = get_class($this->root);
} elseif (is_array($this->root)) {
$class = "Array";
} else {
$class = (string) $this->root;
}
$propertyPath = (string) $this->propertyPath;
$code = $this->code;

View File

@ -25,7 +25,7 @@ class UrlValidator extends ConstraintValidator
const PATTERN = '~^
(%s):// # protocol
(
([\pL\pN\pS-]+\.)+[\pL]+ # a domain name
([\pL\pN\pS-]+\.)+([\pL]|xn\-\-[\pL\pN-]+)+ # a domain name
| # or
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} # a IP address
| # or

View File

@ -33,4 +33,23 @@ EOF;
$this->assertSame($expected, (string) $violation);
}
public function testToStringHandlesArrayRoots()
{
$violation = new ConstraintViolation(
'42 cannot be used here',
'this is the message template',
array(),
array('some_value' => 42),
'some_value',
null
);
$expected = <<<EOF
Array.some_value:
42 cannot be used here
EOF;
$this->assertSame($expected, (string) $violation);
}
}

View File

@ -91,15 +91,28 @@ class UrlValidatorTest extends \PHPUnit_Framework_TestCase
array('http://[::1]:80/'),
array('http://[1:2:3::4:5:6:7]/'),
array('http://sãopaulo.com/'),
array('http://xn--sopaulo-xwa.com/'),
array('http://sãopaulo.com.br/'),
array('http://xn--sopaulo-xwa.com.br/'),
array('http://пример.испытание/'),
array('http://xn--e1afmkfd.xn--80akhbyknj4f/'),
array('http://مثال.إختبار/'),
array('http://xn--mgbh0fb.xn--kgbechtv/'),
array('http://例子.测试/'),
array('http://xn--fsqu00a.xn--0zwm56d/'),
array('http://例子.測試/'),
array('http://xn--fsqu00a.xn--g6w251d/'),
array('http://例え.テスト/'),
array('http://xn--r8jz45g.xn--zckzah/'),
array('http://مثال.آزمایشی/'),
array('http://xn--mgbh0fb.xn--hgbk6aj7f53bba/'),
array('http://실례.테스트/'),
array('http://xn--9n2bp8q.xn--9t4b11yi5a/'),
array('http://العربية.idn.icann.org/'),
array('http://xn--ogb.idn.icann.org/'),
array('http://xn--e1afmkfd.xn--80akhbyknj4f.xn--e1afmkfd/'),
array('http://xn--espaa-rta.xn--ca-ol-fsay5a/'),
array('http://xn--d1abbgf6aiiy.xn--p1ai/'),
array('http://☎.com/'),
);
}