Skip to content

Commit c22bc3a

Browse files
committed
Helpers::formatArgs() escaped \? means ? (possible BC break)
1 parent 85080be commit c22bc3a

File tree

2 files changed

+4
-1
lines changed

2 files changed

+4
-1
lines changed

src/PhpGenerator/Helpers.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,11 +162,13 @@ public static function format(string $statement, ...$args): string
162162
*/
163163
public static function formatArgs(string $statement, array $args): string
164164
{
165-
$tokens = preg_split('#(\.\.\.\?|\$\?|->\?|::\?|\?\*|\?)#', $statement, -1, PREG_SPLIT_DELIM_CAPTURE);
165+
$tokens = preg_split('#(\.\.\.\?|\$\?|->\?|::\?|\\\\\?|\?\*|\?)#', $statement, -1, PREG_SPLIT_DELIM_CAPTURE);
166166
$res = '';
167167
foreach ($tokens as $n => $token) {
168168
if ($n % 2 === 0) {
169169
$res .= $token;
170+
} elseif ($token === '\\?') {
171+
$res .= '?';
170172
} elseif (!$args) {
171173
throw new Nette\InvalidArgumentException('Insufficient number of arguments.');
172174
} elseif ($token === '?') {

tests/PhpGenerator/Helpers.format.phpt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Assert::same('func', Helpers::format('func'));
1717
Assert::same('func(1)', Helpers::format('func(?)', 1));
1818
Assert::same('func', Helpers::formatArgs('func', []));
1919
Assert::same('func(1)', Helpers::formatArgs('func(?)', [1]));
20+
Assert::same('func(1 ? 2 : 3)', Helpers::formatArgs('func(1 \? 2 : 3)', []));
2021
Assert::same('func([1, 2])', Helpers::formatArgs('func(?)', [[1, 2]]));
2122
Assert::same('func(1, 2)', Helpers::formatArgs('func(...?)', [[1, 2]]));
2223
Assert::same('func(1, 2)', Helpers::formatArgs('func(?*)', [[1, 2]])); // old way

0 commit comments

Comments
 (0)