mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-20 12:30:56 +01:00
Prevent "commit message magic words" parser from exploding on "reverts aaaa.....aaz"
Summary: Fixes T9268. Currently, we try to match any string like "a2f313f1" as a commit/revision, so short hashes will get picked up. However, we don't require a word boundary or terminal after the match, so for input like "aaa...aaaaz" the engine can get stuck trying to split the string into sub-matches. That is, in the original case, the input "aaaz" had valid matches against `[rA-Z0-9a-f]+` up to "z" of: aaa aa a a aa a a a All of these will fail once it hits "z", but it has to try them all. This complexity is explosive with longer strings. Instead, require a word boundary or EOL after the match, so this is the only valid match: aaa Then the engine sees the "z", says "nope, no match" and doesn't have to backtrack across all possible combinations. Test Plan: Added a failing unit test, applied patch, clean test. Reviewers: chad Reviewed By: chad Maniphest Tasks: T9268 Differential Revision: https://secure.phabricator.com/D13997
This commit is contained in:
parent
779a612e41
commit
10966519e2
2 changed files with 5 additions and 2 deletions
|
@ -76,6 +76,9 @@ final class DifferentialCustomFieldRevertsParserTestCase
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
||||||
|
// This tests a degenerate regex behavior, see T9268.
|
||||||
|
'Reverts aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz' => array(),
|
||||||
|
|
||||||
"This doesn't revert anything" => array(),
|
"This doesn't revert anything" => array(),
|
||||||
'nonrevert of r11' => array(),
|
'nonrevert of r11' => array(),
|
||||||
'fixed a bug' => array(),
|
'fixed a bug' => array(),
|
||||||
|
|
|
@ -24,8 +24,8 @@ abstract class PhabricatorCustomFieldMonogramParser
|
||||||
'(?:^|\b)'.
|
'(?:^|\b)'.
|
||||||
$prefix_regex.
|
$prefix_regex.
|
||||||
$infix_regex.
|
$infix_regex.
|
||||||
'((?:'.$monogram_pattern.'[,\s]*)+)'.
|
'((?:'.$monogram_pattern.'(?:\b|$)[,\s]*)+)'.
|
||||||
'(?:\band\s+('.$monogram_pattern.'))?'.
|
'(?:\band\s+('.$monogram_pattern.'(?:\b|$)))?'.
|
||||||
$suffix_regex.
|
$suffix_regex.
|
||||||
'(?:$|\b)'.
|
'(?:$|\b)'.
|
||||||
'/';
|
'/';
|
||||||
|
|
Loading…
Reference in a new issue