Kristian Rickert created OPENNLP-1925:
-----------------------------------------

             Summary: Harden RegEx Tests + RegEx exception note
                 Key: OPENNLP-1925
                 URL: https://issues.apache.org/jira/browse/OPENNLP-1925
             Project: OpenNLP
          Issue Type: Bug
            Reporter: Kristian Rickert
            Assignee: Kristian Rickert


OpenNLP's processing path is RegEx-free by policy. {{RegexNameFinder}} and 
{{RegexNameFinderFactory}} are the deliberate exception: their entire purpose 
is regular-expression matching. This change records that exception in the class 
Javadoc of both classes:

{quote}Please note: RegEx is not allowed in the processing path of OpenNLP. 
However, a RegEx step is an obvious exception.{quote}

The same change hardens {{testBuiltinPatternsAreNotVulnerableToReDoS}} (added 
in OPENNLP-1922). The single test ran all five attack inputs inside one 
2-second wall-clock budget. On a throttled or cold CI executor, JVM warmup 
alone can consume the budget before the match itself runs (observed: 2.372s 
against a 2.0s budget on a workload that takes 30ms warm), and a failure did 
not name the input that got slow.

Each attack now runs as its own parameterized case with one warmup pass outside 
the timed section. The 2-second budget per case acts purely as a hang guard; 
against the pre-OPENNLP-1922 patterns the warmup pass itself hangs or overflows 
the stack, so the test still goes red on a regression.

h3. Benchmark evidence

|| Workload || Old patterns || Hardened patterns ||
| Attack suite, all five inputs | hang (>10s) or StackOverflowError per input | 
30ms total, slowest ~10ms |
| Normal text scan, EMAIL, 1MB | 131ms | 25ms |
| Normal text scan, URL, 1MB | 18ms | 15ms |



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to