Upstream filp/whoops state of the touched files before b6b679db7d
This commit is contained in:
1 parent
8652196c72
commit
aed19f01eb
2 files changed
+1
-48
No files matched your search
@@ -80,10 +80,6 @@ class TemplateHelper
|
|||||||
* Escapes a string for output in an HTML document, but preserves
|
* Escapes a string for output in an HTML document, but preserves
|
||||||
* URIs within it, and converts them to clickable anchor elements.
|
* URIs within it, and converts them to clickable anchor elements.
|
||||||
*
|
*
|
||||||
* Only http and https URIs are turned into links. Any other scheme is left as
|
|
||||||
* plain text, because schemes such as javascript: and data: would otherwise
|
|
||||||
* become clickable script execution on the error page.
|
|
||||||
*
|
|
||||||
* @param string $raw
|
* @param string $raw
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
@@ -91,7 +87,7 @@ class TemplateHelper
|
|||||||
{
|
{
|
||||||
$escaped = $this->escape($raw);
|
$escaped = $this->escape($raw);
|
||||||
return preg_replace(
|
return preg_replace(
|
||||||
"@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@i",
|
"@([A-z]+?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@",
|
||||||
"<a href=\"$1\" target=\"_blank\" rel=\"noreferrer noopener\">$1</a>",
|
"<a href=\"$1\" target=\"_blank\" rel=\"noreferrer noopener\">$1</a>",
|
||||||
$escaped
|
$escaped
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -63,49 +63,6 @@ class TemplateHelperTest extends TestCase
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers Whoops\Util\TemplateHelper::escapeButPreserveUris
|
|
||||||
*/
|
|
||||||
public function testEscapeButPreserveUrisIgnoresNonHttpSchemes()
|
|
||||||
{
|
|
||||||
// None of these contain HTML special characters, so escaping leaves them
|
|
||||||
// untouched and the only question is whether they get turned into links.
|
|
||||||
$originals = [
|
|
||||||
// Clicking such a link would run alert(1): the browser decodes %0A to a
|
|
||||||
// newline, which ends the "//x.co/?" JavaScript comment.
|
|
||||||
'javascript://x.co/?%0Aalert(1)',
|
|
||||||
'JAVASCRIPT://x.co/?%0Aalert(1)',
|
|
||||||
'vbscript://x.co/?%0Amsgbox(1)',
|
|
||||||
'data://text.html/?%0Ax',
|
|
||||||
// "_" is between "Z" and "a" in ASCII, so it used to pass as a scheme.
|
|
||||||
'_://x.co/a',
|
|
||||||
'See javascript://x.co/?%0Aalert(document.cookie) for details',
|
|
||||||
];
|
|
||||||
|
|
||||||
foreach ($originals as $original) {
|
|
||||||
$this->assertSame($original, $this->helper->escapeButPreserveUris($original));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers Whoops\Util\TemplateHelper::escapeButPreserveUris
|
|
||||||
*/
|
|
||||||
public function testEscapeButPreserveUrisStillLinksHttpUris()
|
|
||||||
{
|
|
||||||
$originals = [
|
|
||||||
'http://example.com/a',
|
|
||||||
'https://example.com/a',
|
|
||||||
'HTTPS://example.com/a',
|
|
||||||
];
|
|
||||||
|
|
||||||
foreach ($originals as $original) {
|
|
||||||
$this->assertSame(
|
|
||||||
"<a href=\"$original\" target=\"_blank\" rel=\"noreferrer noopener\">$original</a>",
|
|
||||||
$this->helper->escapeButPreserveUris($original)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @covers Whoops\Util\TemplateHelper::breakOnDelimiter
|
* @covers Whoops\Util\TemplateHelper::breakOnDelimiter
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in new issue
Block a user