Upstream filp/whoops state of the touched files before b6b679db7d

This commit is contained in:
upstream committed 2026-09-04 03:00:40 +02:00
1 parent 8652196c72
commit aed19f01eb
2 files changed
+1 -48

No files matched your search

+1 -5
View File
@@ -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
); );
-43
View File
@@ -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
*/ */