“监视词”中的无效正则表达式导致监视词无法工作

启用“监视词正则表达式”设置时,无效的正则表达式会导致整个特定的监视词类别失效。

复现步骤

  1. 启用“监视词正则表达式”。
  2. 向“需要审批”添加一个监视词模式,例如 same issue
  3. 添加一个无效的监视词模式,例如 *ban*(这通常是在启用正则表达式之前,监视词中包含通配符的情况)。
  4. 注意:包含“same issue”的帖子将跳过审批队列,并且也会被“测试”表单忽略。
  5. 移除无效的监视词。
  6. 注意:“same issue”现在将正确匹配。

复现步骤(更严重):

  1. 启用“监视词正则表达式”和标签。
  2. 向“标签”添加一个无效的监视词模式,例如 *tebex.io*paid
  3. 尝试发布新主题。这将返回“错误 500”,并在 /logs 中显示以下结果:
RegexpError (target of repeat operator is not specified: /*tebex.io*/)
app/services/word_watcher.rb:116:in `initialize'
app/services/word_watcher.rb:116:in `new'
app/services/word_watcher.rb:116:in `matches?'
lib/topic_creator.rb:184:in `block in setup_tags'
lib/topic_creator.rb:183:in `each'
lib/topic_creator.rb:183:in `setup_tags'
lib/topic_creator.rb:46:in `create'
lib/post_creator.rb:501:in `create_topic'

附注

我认为,如果正则表达式被禁用,但仍允许输入有效的正则表达式(例如,用 / 包裹,类似于通配符),那会很好。特别是因为如果现有的任何监视词已经包含通配符,切换该选项会导致严重故障。

3 个赞

嗯,我们这里可以添加什么保护措施吗?@sam

这之所以被放在站点设置后面是有原因的 @blattersturm —— 你必须清楚自己在做什么……正则表达式相当危险。

1 个赞

也许在更改设置之前,我们需要将已关注的词汇数量设为零,@nbianca

如果你尝试更改设置但仍有已关注的词汇,我们会要求你全部删除吗?

3 个赞