Expressão regular de palavra observada falha (2025)

Semelhante a este

Repro

  • Expressões regulares de palavras monitoradas ativadas
  • Ação de tag de palavras monitoradas
  • Expressão regular *abc

Resultado

É impossível criar tópicos ou postagens

RegexpError (alvo do operador de repetição não especificado: /(*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 “repetir o token anterior zero ou mais vezes”
  • não há token anterior
2 curtidas

Então, na verdade, a regex deve ser validada antes de ser permitida a adição? E deve haver um resgate para que uma regex inválida não possa derrubar o mundo inteiro?

1 curtida

O que obviamente aconteceu aqui foi que as palavras observadas eram palavras observadas regulares e * era o curinga, e então watched words regular expressions enabled foi ativado.

Então, isso

1 curtida

Bem, agora está óbvio quando você diz assim. :rofl:

Validar regex ao salvar parece uma coisa muito sensata a se fazer.

Colocando um pr-welcome nisso, mas a equipe fará a triagem e decidirá se faz sentido fazer isso nas próximas semanas para nos poupar suporte futuro.

1 curtida

Isso não impedirá que as pessoas insiram expressões curinga “normais” e, em seguida, ativem watched words regular expressions enabled, que é o que aconteceu aqui.

Eu acho que só precisa de um manipulador de exceção em torno da chamada 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 curtidas

Obrigado pelo relatório @RGJ, isso será corrigido por

3 curtidas

Este tópico foi fechado automaticamente após 10 horas. Novas respostas não são mais permitidas.