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
此項特性的最初提案:
其他更新內容包括優化效能,更新標準庫等,。