![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PowerShell) Regular Expression Catastrophic BacktrackSee more Regular Expressions ExamplesThis example demonstrates how adding a processing time limit prevents a catastrophic backtrack.Catastrophic backtracking in regular expressions occurs when a poorly constructed pattern causes the regex engine to try an exponential number of possibilities, especially on non-matching input. This leads to extremely slow performance or even a program hang. Example:(a+)+$ Applied to: aaaaaaaaaaaaaaaaaaaaaab The regex engine tries many combinations of grouping How to prevent it:
Catastrophic backtracking is especially dangerous when regex patterns are applied to user-controlled input. Note: This example requires Chilkat v11.1.0 or greater.
Add-Type -Path "C:\chilkat\ChilkatDotNet47-x64\ChilkatDotNet47.dll" $sbSubject = New-Object Chilkat.StringBuilder # Create data that would cause a catastrophic backtrack with the regular expression "((a+)+$)" $i = 0 while ($i -lt 500) { $sbSubject.Append("aaaaaaaaaaaaaaaaaaaa") $i = $i + 1 } $sbSubject.Append("X") $pattern = "((a+)+$)" $json = New-Object Chilkat.JsonObject $json.EmitCompact = $false # Set a time limit to prevent a catastrophic backtrack.. # (Approx) 1 second time limit. # This should fail: $numMatches = $sbSubject.RegexMatch($pattern,$json,1000) if ($numMatches -lt 1) { $($sbSubject.LastErrorText) # We should get an error such as the following: # ChilkatLog: # RegexMatch: # ChilkatVersion: 11.1.0 # regex_match: # timeoutMs: 1000 # Exceeded regular expression match limit. # elapsedMs: Elapsed time: 797 millisec # num_matches: -1 # --regex_match # --RegexMatch # --ChilkatLog exit } # We shouldn't get here. # The above data and regular expression should've caused a catastrophic backtrack. $("numMatches: " + $numMatches) $($json.Emit()) |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.