شاهدت تعطل التعبير العادي للكلمة (2025)

Similar to this one

Repro

  • watched words regular expressions enabled
  • watched words tag action
  • regular expression *abc

Result

It is impossible to create topics or posts

RegexpError (target of repeat operator is not specified: /(*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'

Cause

  • * means “repeat the previous token zero or more times”
  • there is no previous token
إعجابَين (2)

So really the regex should be validated before allowing it to be added? And there should be a rescue so an invalid regex can’t crash the whole world?

إعجاب واحد (1)

What obviously happened here is that the watched words were regular watched words and * was the wildcard, and then watched words regular expressions enabled was enabled.

So this

إعجاب واحد (1)

Well, now it’s obvious when you say it like that. :rofl:

Valildating regex in on save seems like a very sane thing to do.

putting a pr-welcome on this, but team will triage and decide if it makes sense to do this in the upcoming weeks to save us future support.

إعجاب واحد (1)

That won’t prevent people entering “normal” wildcard expressions, and then turning on watched words regular expressions enabled, which is what happened here.

I think it just needs an exception handler around the regexp call

  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)

Thanks for the report @RGJ, this will be fixed by

3 إعجابات

This topic was automatically closed after 10 hours. New replies are no longer allowed.