ReDos 测试用例

#!/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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值