Skip to content

Commit 273d379

Browse files
committed
SyntaxError::getNormalizedMessage(): bug fix - file name containing regex delimiter
If a file name would contain the delimiter used in the replacement regex, it would cause a PHP error like `preg_replace(): Unknown modifier 'f'`. Fixed by telling `preg_quote()` explicitly which delimiter is being used. Includes unit test. Ref: https://www.php.net/manual/en/function.preg-quote.php
1 parent e222caf commit 273d379

File tree

2 files changed

+5
-1
lines changed

2 files changed

+5
-1
lines changed

src/Errors/SyntaxError.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public function getLine()
3030
public function getNormalizedMessage($translateTokens = false)
3131
{
3232
$message = preg_replace('~^(Parse|Fatal) error: (syntax error, )?~', '', $this->message);
33-
$message = preg_replace('~ in ' . preg_quote(basename($this->filePath)) . ' on line [0-9]+$~', '', $message);
33+
$message = preg_replace('~ in ' . preg_quote(basename($this->filePath), '~') . ' on line [0-9]+$~', '', $message);
3434
$message = ucfirst($message);
3535

3636
if ($translateTokens) {

tests/Unit/Errors/SyntaxErrorGetNormalizeMessageTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@ public function dataFilePathHandling()
7474
'filePath' => 'test in file.php',
7575
'fileName' => 'test in file.php',
7676
),
77+
'File name containing regex delimiter' => array(
78+
'filePath' => 'test~file.php',
79+
'fileName' => 'test~file.php',
80+
),
7781
);
7882
}
7983
}

0 commit comments

Comments
 (0)