Watched word 正则表达式崩溃 (2025)

此问题类似

重现步骤

  • 启用了监视词正则表达式
  • 监视词标签操作
  • 正则表达式 *abc

结果

无法创建主题或帖子

RegexpError (重复运算符的目标未指定:/(*abc)/i)
app/services/word_watcher.rb:239:in `initialize'
app/services/word_watcher.rb:239:in `new'
app/services/word_watcher.rb:239:in `word_matches?'
lib/topic_creator.rb:214:in `block in setup_tags'
lib/topic_creator.rb:213:in `each'
lib/topic_creator.rb:213:in `setup_tags'
lib/topic_creator.rb:48:in `create'
lib/post_creator.rb:493:in `create_topic'

原因

  • * 表示“将前一个标记重复零次或多次”
  • 没有前一个标记
2 个赞

所以正则表达式在被允许添加之前应该被验证?并且应该有一个救援,这样无效的正则表达式就不会导致整个世界崩溃?

1 个赞

这里明显发生的情况是,监视的单词是常规的监视单词,而 * 是通配符,然后启用了“watched words regular expressions enabled”。

所以这个

1 个赞

嗯,现在你这么说了就显而易见了。:rofl:

在保存时验证正则表达式似乎是一个非常明智的做法。

对此添加 pr-welcome 标签,但团队将进行分类并决定在未来几周内是否可以这样做,以节省我们未来的支持。

1 个赞

这并不能阻止人们输入“普通”通配符表达式,然后启用 watched words regular expressions enabled,而这正是这里发生的情况。

我认为只需要在 regexp 调用 周围 添加一个异常处理程序

  def word_matches?(word, case_sensitive: false)
    options = case_sensitive ? nil : Regexp::IGNORECASE
    Regexp.new(WordWatcher.word_to_regexp(word), options).match?(@raw)
  end
2 个赞

感谢您的报告@RGJ,此问题将在以下链接中修复:

3 个赞

该主题已在 10 小时后自动关闭。不再允许回复。