Expresión regular de palabra observada falla (2025)

Similar a este

Reproducción

  • Expresiones regulares de palabras vigiladas habilitadas
  • Acción de etiqueta de palabras vigiladas
  • Expresión regular *abc

Resultado

Es imposible crear temas o publicaciones

RegexpError (el objetivo del operador de repetición no está 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 el token anterior cero o más veces”
  • no hay token anterior
2 Me gusta

Entonces, ¿realmente la expresión regular debería validarse antes de permitir que se agregue? ¿Y debería haber un rescate para que una expresión regular inválida no pueda colapsar el mundo entero?

1 me gusta

Lo que obviamente sucedió aquí es que las palabras observadas eran palabras observadas regulares y * era el comodín, y luego se habilitó watched words regular expressions enabled.

Así que esto

1 me gusta

Bueno, ahora es obvio cuando lo dices así. :rofl:

Validar expresiones regulares al guardar parece una acción muy sensata.

Se añade un pr-welcome, pero el equipo evaluará y decidirá si tiene sentido hacerlo en las próximas semanas para ahorrarnos soporte futuro.

1 me gusta

Eso no evitará que las personas ingresen expresiones comodín “normales” y luego activen watched words regular expressions enabled, que es lo que sucedió aquí.

Creo que solo necesita un manejador de excepciones alrededor de la llamada a 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 Me gusta

Gracias por el informe @RGJ, esto se solucionará con

3 Me gusta

Este tema se cerró automáticamente después de 10 horas. Ya no se permiten nuevas respuestas.