|  | 
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
| (Classic ASP) 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. 
 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <% set sbSubject = Server.CreateObject("Chilkat.StringBuilder") ' Create data that would cause a catastrophic backtrack with the regular expression "((a+)+$)" i = 0 Do While i < 500 success = sbSubject.Append("aaaaaaaaaaaaaaaaaaaa") i = i + 1 Loop success = sbSubject.Append("X") pattern = "((a+)+$)" set json = Server.CreateObject("Chilkat.JsonObject") json.EmitCompact = 0 ' 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 < 1) Then Response.Write "<pre>" & Server.HTMLEncode( sbSubject.LastErrorText) & "</pre>" ' 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 Response.End End If ' We shouldn't get here. ' The above data and regular expression should've caused a catastrophic backtrack. Response.Write "<pre>" & Server.HTMLEncode( "numMatches: " & numMatches) & "</pre>" Response.Write "<pre>" & Server.HTMLEncode( json.Emit()) & "</pre>" %> </body> </html> | ||||
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.