#!/usr/bin/env python
import re
import time
import sys
regex = r"^(a+)+$"
maketeststring = lambda n: "a" * n +"!"
maxiter = 50
maxtime = 2
#
# Main function
#
def main():
print "Python Regular Expression DoS demo"
print "Platfrom: %s %s" % (sys.platform, sys.version)
print "Regular expression %s" % (regex)
print "Typical test string: %s" % (maketeststring(10))
print "Max. itertations: %d" % (maxiter)
print "Max. match time: %d sec%s" % (maxtime, "s" if maxtime != 1 else "")
print
cregex = re.compile(regex)
for i in xrange(1, maxiter):
time = runtest(cregex, i)
if time > maxtime:
break
return
#
# Run one test
#
def runtest(regex, n):
teststr = maketeststring(n)
starttime = time.clock()
match = regex.match(teststr)
elapsetime = int((time.clock() - starttime) * 1000)
count = 0
if match != None:
count = match.end - match.start
print "For n = %d, match time = %d msec%s, match count = %s" % (n, elapsetime, "s" if elapsetime == 1 else "", count)
return float(elapsetime) / 1000
if __name__ == "__main__":
main()
ReDos 测试用例
最新推荐文章于 2024-05-31 09:35:53 发布