【问题标题】:Catastrophic backtracking [A-Z]*([0-9A-Z])-[1-9]*([0-9])灾难性回溯 [A-Z]*([0-9A-Z])-[1-9]*([0-9])
【发布时间】:2019-08-13 22:41:27
【问题描述】:

我有一个脚本正在运行,有时会导致服务器使用 100% cpu。我怀疑这是因为一些正则表达式。 是否有任何示例输入可能导致此正则表达式的灾难性回溯:[A-Z]([0-9A-Z])-[1-9]([0-9])

用于将 ABC-123 等 jira 票证模式匹配到提交消息中

readonly ticket_regexp='[A-Z]*([0-9A-Z])-[1-9]*([0-9])'
readonly commit_msg="""
* ABC-123 Added some content to the file
* DEF-456 Added some content to the file
"""

if [[ ! "${commit_msg}" =~ ${ticket_regexp} ]]; then
    echo "Does not contain the required Jira ticket reference" >&2
    exit 1
fi

为变量 commit_msg 查找可能导致正则表达式回溯并将 cpu 设置为 100% 的值

【问题讨论】:

  • 不确定它是否能解决问题,但ticket_regexp='[A-Z][0-9A-Z]*-[1-9][0-9]*' 似乎是你想写的。
  • 谢谢,但我更好奇哪个输入可能触发错误

标签: regex recursive-backtracking


【解决方案1】:

据我所知,正则表达式不是问题 - 它可能在您的代码中的其他地方。

Catastrophic backtracking 通常与背靠背或嵌套的所有格量词一起出现,并且您的正则表达式中没有任何示例。在 regex101.com 上进行的一些模糊测试也表明,对无效的正则表达式没有任何更改,导致确定失败的步骤呈指数增长。

话虽如此,如果您仍然担心回溯并且不信任您的正则表达式,您是否知道 Atlassian 自己已经发布了 official regexes to match JIRA ids

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多