perl5243delta - perl v5.24.3 的新功能
本文件說明 5.24.2 版本與 5.24.3 版本之間的差異。
如果您要從較早的版本(例如 5.24.1)升級,請先閱讀 perl5242delta,其中說明了 5.24.1 和 5.24.2 之間的差異。
使用不分大小寫的修飾詞編譯某些正規表示式模式可能會導致堆疊緩衝區溢位並使 perl 崩潰。此問題現已修復。 [GH #16021]
對於正規表示式模式中特定類型的語法錯誤,錯誤訊息可能會包含隨機、可能很大的記憶體區塊內容,或可能導致 perl 崩潰。此問題現已修正。 [GH #16025]
$ENV{$key}
堆疊緩衝區溢位Windows 上 %ENV
程式碼中可能的堆疊緩衝區溢位已修正,方法是移除緩衝區,因為它本來就是多餘的。 [GH #16051]
沒有任何變更故意與 5.24.2 不相容。如果存在任何不相容變更,它們是錯誤,我們要求您提交報告。請參閱下方的 "報告錯誤"。
Module::CoreList 已從版本 5.20170715_24 升級至 5.20170922_24。
POSIX 已從版本 1.65 升級至 1.65_01。
Time::HiRes 已從版本 1.9733 升級至 1.9741。
使用 GCC 6 和連結時間最佳化(gcc 的 -flto 選項)進行建置時,Configure 會將所有探測到的符號視為系統中存在,而不管它們實際上是否存在。此問題已修正。 [GH #15322]
如果同時要求 -Duselongdouble
和 -Dusequadmath
,Configure 現在會中止。 [GH #14944]
修正 Configure 可能將 -quadmath
附加到 archname 的錯誤,即使它已經存在。 [GH #15423]
已修正使用 -DPERL_GLOBAL_STRUCT
或 -DPERL_GLOBAL_STRUCT_PRIVATE
的 Clang 建置(針對這些組態停用執行緒安全性分析)。
configure.com
現在識別 VSI 品牌的 C 編譯器。
在 Perl 的 64 位元組建中,使用 GCC 6 建置 XS 模組會失敗,原因是 strtoll
和 strtoull
的對應錯誤。這個問題現在已修正。 [GH #16074] [cpan #121683] [cpan #122353]
/@0{0*->@*/*0
和類似的扭曲用法會導致崩潰,但現在不會了,只會產生語法錯誤。 [GH #15333]
do
或 require
的參數是參考或類型全域變數,字串化時包含空字元,從 Perl 5.20 開始會導致崩潰,但現在已修正。 [GH #15337]
在某些情況下,包含 &&
或 ||
算子(或其同義詞 and
和 or
)的表達式編譯不正確。如果左邊是取反的裸字常數或包含常數表達式的取反 do {}
區塊,而右邊是取反的不可摺疊表達式,其中一個取反會被忽略。if
和 unless
陳述式修改器也是如此,不過左右邊會互換。這個長期的錯誤現在已修正。 [GH #15285]
reset
有參數時,遇到非全域變數的儲存區條目不再會崩潰。 [GH #15314]
將雜湊指定給名為 *::::::
的類型全域變數,以及刪除此類型的全域變數,不再會導致崩潰。 [GH #15307]
bitwise
功能下任何位元運算的指定變數,如果左邊是陣列或雜湊,會導致崩潰。 [GH #15346]
socket
現在會將系統傳回的錯誤代碼留在 $!
中,如果失敗的話。 [GH #15383]
解析錯誤的 POSIX 字元類別不再會洩漏記憶體。 [GH #15382]
自 Perl 5.20 以來,當使用 -x 開關呼叫 perl 時,行號會少一個。這個問題已修正。 [GH #15413]
某些罕見情況下,同時釋放子常式和檔案處理常式會導致崩潰,但已修正。這個崩潰問題在 Perl 5.22 中引入。 [GH #15435]
某些正規表示式解析故障可能會導致斷言失敗,例如正規表示式 /(?<=/
和 /(?<!/
。此問題現已修復。 [GH #15332]
gethostent
和類似函數現在會在內部執行 null 檢查,以避免與 torsocks 函式庫發生衝突。這是 Perl 5.22 的回歸。 [GH #15478]
連續兩次提到同一個常數(這是語法錯誤)不再會在偵錯建置下發生斷言失敗。這是 Perl 5.20 的回歸。 [GH #15017]
在 Perl 5.24 中,fchown
已變更為不接受負一作為引數,因為在某些平台上這是個錯誤。然而,在某些其他平台上,這是個可接受的引數。此變更已還原。 [GH #15523].
@{x
後面接換行符,其中 "x"
代表控制字元或非 ASCII 字元,不再會產生亂碼語法錯誤訊息或當機。 [GH #15518]
Perl 5.24 中 tr/\N{U+...}/foo/
的回歸,當碼點介於 128 和 255 之間時,已修復。 [GH #15475].
已修復許多與十六進位浮點數的 printf "%a"
相關的問題。此外,現在支援「次常態」(以前稱為「非正規」)浮點數,包括一般的 IEEE 754 浮點數(64 位元或 128 位元)和 x86 80 位元「延伸精度」。請注意,次常態十六進位浮點數文字會顯示有關「次方溢位」的警告。 [GH #15495] [GH #15502] [GH #15503] [GH #15504] [GH #15505] [GH #15510] [GH #15512]
如果 evalbytes
後面出現一個裸字,有時會導致剖析器當機。 [GH #15586]
已修復正規表示式剖析器未在語法錯誤模式中正確設定語法錯誤的地方。 [GH #15565]
已透過避免可能的記憶體封裝修復 Perl 的 sprintf
實作中的漏洞。 [GH #15970]
Perl 5.24.3 自 Perl 5.24.2 以來約有 2 個月的開發時間,包含來自 23 位作者、橫跨 120 個檔案的約 3,200 行變更。
排除自動產生的檔案、文件和發行工具,約有 1,600 行變更套用於 56 個 .pm、.t、.c 和 .h 檔案。
Perl 持續蓬勃發展進入第三個十年,這要歸功於活躍的使用者和開發人員社群。已知以下人員貢獻了改善 Perl 5.24.3 的成果
Aaron Crane、Craig A. Berry、Dagfinn Ilmari Mannsåker、Dan Collins、Daniel Dragan、Dave Cross、David Mitchell、Eric Herman、Father Chrysostomos、H.Merijn Brand、Hugo van der Sanden、James E Keenan、Jarkko Hietaniemi、John SJ Anderson、Karl Williamson、Ken Brown、Lukas Mai、Matthew Horsfall、Stevan Little、Steve Hay、Steven Humphrey、Tony Cook、Yves Orton。
上述清單幾乎可以確定不完整,因為它是自動從版本控制歷程產生。特別是,它不包含已知(非常感謝)的貢獻者,他們向 Perl 錯誤追蹤器回報問題。
此版本中包含的許多變更源自 Perl 核心包含的 CPAN 模組。我們感謝整個 CPAN 社群協助 Perl 蓬勃發展。
如需更完整的 Perl 歷來所有貢獻者清單,請參閱 Perl 原始碼發行中的 AUTHORS 檔案。
如果您發現您認為是錯誤的問題,您可以查看最近張貼到 comp.lang.perl.misc 新聞群組的文章和 https://rt.perl.org/ 上的 perl 錯誤資料庫。Perl 首頁 http://www.perl.org/ 上也可能有相關資訊。
如果您認為您發現一個未回報的錯誤,請執行發行版附帶的 perlbug 程式。請務必將您的錯誤簡化為一個微小但足夠的測試案例。您的錯誤回報連同 perl -V
的輸出,將會傳送至 perlbug@perl.org,供 Perl 移植團隊分析。
如果您回報的錯誤具有安全性影響,不適合傳送至公開封存的郵件清單,請參閱 "perlsec 中的安全性漏洞連絡資訊",了解如何回報問題的詳細資訊。
Changes 檔案說明如何檢視已變更內容的詳盡資訊。
INSTALL 檔案說明如何建置 Perl。
README 檔案說明一般事項。
Artistic 和 Copying 檔案說明著作權資訊。