Espressione regolare di parole osservate crash (2025)

Simile a questo

Riproduzione

  • Espressioni regolari delle parole monitorate abilitate
  • Azione tag delle parole monitorate
  • Espressione regolare *abc

Risultato

È impossibile creare argomenti o post

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'

Causa

  • * significa “ripeti il token precedente zero o più volte”
  • non c’è un token precedente
2 Mi Piace

Quindi la regex dovrebbe essere convalidata prima di consentirne l’aggiunta? E dovrebbe esserci un recupero in modo che una regex non valida non possa mandare in crash tutto il mondo?

1 Mi Piace

Ciò che è ovviamente successo qui è che le parole monitorate erano parole monitorate normali e * era il carattere jolly, e quindi è stata abilitata l’opzione watched words regular expressions enabled.

Quindi questo

1 Mi Piace

Beh, ora è ovvio quando lo dici così. :rofl:

La convalida delle regex al salvataggio sembra una cosa molto sensata da fare.

Metto un pr-welcome su questo, ma il team valuterà e deciderà se ha senso farlo nelle prossime settimane per risparmiarci supporto futuro.

1 Mi Piace

Ciò non impedirà alle persone di inserire espressioni wildcard “normali” e poi attivare watched words regular expressions enabled, che è quello che è successo qui.

Penso che abbia solo bisogno di un gestore di eccezioni attorno alla chiamata 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 Mi Piace

Grazie per il report @RGJ, questo verrà corretto da

3 Mi Piace

Questo argomento è stato chiuso automaticamente dopo 10 ore. Non sono più consentite nuove risposte.