Ruby 3.2.0 Preview 1 ha sido lanzado. Esta versión agrega muchas funciones nuevas, así como un rendimiento optimizado.
Compatibilidad con WebAssembly basado en WASI
Este es un puerto inicial de compatibilidad con WebAssembly basado en WASI. Esta característica permite que los binarios de CRuby se utilicen en navegadores web, entornos Serverless Edge y otros integradores WebAssembly/WASI. Actualmente, este puerto pasa las pruebas de los conjuntos de pruebas básicos y de arranque sin utilizar la API de subprocesos.
Mecanismo de salida de tiempo de espera de expresión regular
Esta versión presenta un mecanismo de salida de tiempo de espera de expresión regular.
Regexp.timeout = 1.0
/^a*b?a*$/ =~ "a" * 50000 + "x"
#=> Regexp::TimeoutError is raised in one second
Dado que la coincidencia de expresiones regulares puede llevar mucho tiempo, los atacantes pueden usarla para realizar ataques DoS (DoS de expresión regular o ReDoS) cuando el código intenta hacer coincidir una expresión regular ineficiente con una entrada que no es de confianza. .
Regexp.timeout
Configurado de acuerdo con los requisitos de la aplicación Ruby, el riesgo de DoS se puede prevenir o reducir significativamente. Tenga en cuenta que Regexp.timeout
es un elemento de configuración global. Si desea usar diferentes configuraciones de tiempo de espera para algunas expresiones regulares especiales, debe usar timeout
palabras clave Regexp.new
.
Regexp.timeout = 1.0
# This regexp has no timeout
long_time_re = Regexp.new("^a*b?a*$", timeout: nil)
long_time_re =~ "a" * 50000 + "x" # never interrupted
Propuesta original para esta característica: https://bugs.ruby-lang.org/issues/17837
Otras actualizaciones incluyen la optimización del rendimiento, la actualización de la biblioteca estándar, etc. Para obtener más información, consulte el anuncio de lanzamiento .