HomePhorge

Fix an issue where prose diffing may fail after hitting the PCRE backtracking…

Description

Fix an issue where prose diffing may fail after hitting the PCRE backtracking limit

Summary:
Fixes T13554. For certain prose diff inputs and PCRE backtracking limits, this regular expression may back track too often and fail.

A characteristic input is "x x x x ...", i.e. many sequences where (.*?)\s*\z looks like it may be able to match but actually can not.

I think writing an expression which has all the behavior we'd like without this backtracking issue isn't trivial (at least, I don't think I know how to do it offhand); just use a strategy based on "trim()" insetad, which avoids any PCRE complexities here.

Test Plan: Locally, this passes the "x x x ..." test which the previous code failed. I'm not including that test because it won't reproduce across values of "pcre.backtrac_limit", PCRE versions, etc.

Maniphest Tasks: T13554

Differential Revision: https://secure.phabricator.com/D21422

Details

Provenance
epriestleyAuthored on Jul 23 2020, 7:35 AM
themackabuPushed on Mar 25 2025, 8:07 PM
Parents
rP8f9ba4852861: Fix an issue with destruction of Revision and Diff objects with viewstates
Branches
Unknown
Tags
Unknown

Event Timeline