Ruby 3.2.0 Preview 1 est sorti. Cette version ajoute de nombreuses nouvelles fonctionnalités, ainsi que des performances optimisées.
Prise en charge de WebAssembly basé sur WASI
Il s'agit d'un premier portage de la prise en charge de WebAssembly basée sur WASI. Cette fonctionnalité permet aux binaires CRuby d'être utilisés sur les navigateurs Web, les environnements Serverless Edge et d'autres intégrateurs WebAssembly/WASI. Actuellement, ce port réussit les tests des suites de tests de base et d'amorçage sans utiliser l'API Thread.
Mécanisme de sortie du délai d'expiration des expressions régulières
Cette version introduit un mécanisme de sortie de délai d'attente d'expression régulière.
Regexp.timeout = 1.0
/^a*b?a*$/ =~ "a" * 50000 + "x"
#=> Regexp::TimeoutError is raised in one second
Étant donné que la correspondance des expressions régulières peut prendre beaucoup de temps, les attaquants peuvent l'utiliser pour effectuer des attaques DoS (expression régulière DoS ou ReDoS) lorsque le code tente de faire correspondre une expression régulière inefficace à une entrée non fiable. .
Regexp.timeout
Configuré selon les exigences de l'application Ruby, le risque de DoS peut être prévenu ou considérablement réduit. Veuillez noter qu'il Regexp.timeout
s'agit d'un élément de configuration global. Si vous souhaitez utiliser différents paramètres de délai d'attente pour certaines expressions régulières spéciales, vous devez utiliser des mots- timeout
clés 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
Proposition originale pour cette fonctionnalité : https://bugs.ruby-lang.org/issues/17837
D'autres mises à jour incluent l'optimisation des performances, la mise à jour de la bibliothèque standard, etc. Pour plus de détails, consultez l'annonce de la version .