Ruby 3.2.0 Preview 1 已发布。此版本增加了许多新特性,以及优化性能。
基于 WASI 的 WebAssembly 支持
这是基于 WASI 的 WebAssembly 支持的初始移植。此项特性使得 CRuby 二进制文件可在 Web 浏览器、Serverless Edge 环境和其他 WebAssembly/WASI 嵌入器上使用。目前,此移植可在不使用 Thread API 的前提下通过基本和引导测试套件的测试。
正则表达式超时退出机制
此版本引入了正则表达式超时退出机制。
Regexp.timeout = 1.0
/^a*b?a*$/ =~ "a" * 50000 + "x"
#=> Regexp::TimeoutError is raised in one second
由于正则表达式匹配会耗费不少时间,当代码试图向不受信任的输入匹配低效的正则表达式时,攻击者可能会利用它进行 DoS 攻击(即正则表达式 DoS,或称作 ReDoS)。
Regexp.timeout
根据 Ruby 应用程序的要求进行配置,可以防止或显着降低 DoS 的风险。请注意,Regexp.timeout
是全局配置项,如果希望对某些特殊的正则表达式使用不同的超时设置,需要使用timeout
关键字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
此项特性的最初提案:https://bugs.ruby-lang.org/issues/17837
其他更新内容包括优化性能,更新标准库等,详情查看发布公告。
猜你喜欢:暂无回复。