perl5222delta - perl v5.22.2 的新功能
此文件說明 5.22.1 版和 5.22.2 版之間的差異。
如果您要從較早的版本(例如 5.22.0)升級,請先閱讀 perl5221delta,其中說明了 5.22.0 和 5.22.1 之間的差異。
這是 CVE-2015-8608。更多資訊請參閱 [GH #15067]。
canonpath()
中的 taint 遺失這是 CVE-2015-8607。更多資訊請參閱 [GH #15084]。
mkstemp(3)
之前設定正確的 umask在 5.22.0 中,perl 開始在呼叫 mkstemp(3)
之前將 umask 設定為 0600
,並在之後還原。這錯誤地告訴 open(2)
在套用給定模式之前從中移除擁有者讀取和寫入位元,而不是預期的只保留這些位元。
在 mkstemp(3)
中使用模式 0666
的系統(例如舊版本的 glibc)會建立權限為 0066
的檔案,不論目前的 umask 為何,都會保留世界讀取和寫入權限。
已透過改用 umask 0177
修正此問題。
crypt()
中存取未初始化的記憶體已新增驗證,可偵測 salt 太短和 salt 中的無效字元。
environ
先前,如果環境變數在 environ[]
中出現多次,%ENV
會包含該名稱的最後一個項目,而典型的 getenv()
會傳回第一個項目。我們現在確定 %ENV
包含與 getenv()
傳回的內容相同。
其次,我們現在從 environ[]
中移除重複項,因此如果在 %ENV
中設定具有該名稱的設定,我們不會將不安全的數值傳遞給子處理程序。
這是 CVE-2016-2381。
沒有任何變更故意與 Perl 5.22.1 不相容。如果存在任何變更,它們是錯誤,我們要求您提交報告。請參閱下方的 "回報錯誤"。
File::Spec 已從版本 3.56 升級至 3.56_01。
canonpath()
現在保留污染。請參閱 "修正 canonpath()
中的污染遺失"。
Module::CoreList 已從版本 5.20151213 升級至 5.20160429。
Perl 5.18.4 中列出的 Digest::SHA 版本號碼錯誤,已修正。同樣地,5.18.3 和 5.18.4 中 Config 的版本號碼也已修正。 [GH #15202]
當隱式關閉檔案處理常式時,可能會出現警告訊息「無法正確關閉檔案處理常式 %s:%s」,其說明已擴充並改善。
hex()
的文件已修訂,以釐清有效的輸入。
Dtrace 編譯現在可以在系統上成功編譯,這些系統具有較新的 dtrace,需要使用 .d 檔案中的探測的輸入物件檔案。
先前探測會失敗並導致編譯失敗。
Configure 不再預設探測 libnm。原本這是「新數學」函式庫,但 GNOME NetworkManager 已重新使用此名稱。
Configure 現在認識 gcc 5。
使用 -DPERL_MEM_LOG 編譯 perl 現在又可以運作。
在 Darwin 上使用 -Dusecbacktrace 編譯 perl 現在又可以運作。
在 OS X 上從 Terminal 編譯或測試時,同時啟用 -DDEBUGGING 和執行緒的編譯會失敗,並出現「恐慌:從錯誤的池中釋放」錯誤。這是因為 perl 內部管理環境與使用 libc setenv()
函式更新環境的 atfork 處理常式衝突所致。
perl 現在使用 setenv()
/unsetenv()
來更新 OS X 上的環境。
ppc64el(Debian 中小端 PowerPC 的命名)的浮點格式現在可以正確偵測。
已修正 t/porting/extrefs.t 中的測試失敗。
已移除 Perl_newATTRSUB_x()
中不必要的斷言。如果已看到具有原型的存根子程式定義,則任何後續具有屬性的相同子程式的存根(或定義)都會因為空指標而導致斷言失敗。
在找不到 import()
或 unimport()
方法時,內部使用的佔位符 &PL_sv_yes
的呼叫現在可以正確處理純量內容。 [GH #14902]
pipe()
算子會對 DEBUGGING
建置進行斷言,而不是產生正確的錯誤訊息。已偵測並正確報告斷言的條件,而沒有斷言,因此已移除斷言。 [GH #15015]
在某些情況下,無法剖析 here-doc 會嘗試使用已釋放的記憶體。這是因為指標未正確還原所致。 [GH #15009]
Perl 現在會在預期看到算子時報告更多內容,並避免斷言失敗。 [GH #14472]
如果在剖析另一個算子時找到 here-doc,剖析器已讀取檔案結尾,且 here-doc 未終止,perl 可能會產生斷言或區段錯誤。這現在會可靠地抱怨未終止的 here-doc。 [GH #14789]
現在避免在沒有檔名的情況下處理 #line
指令時剖析超出緩衝區結尾。 [GH #15139]
Perl 5.22.0 新增了對 C99 十六進位浮點數表示法的支援,但有時會錯誤剖析十六進位浮點數。此問題已修正。 [GH #15120]
某些包含反向方括弧字元類別中補數 POSIX 類別的正規表示式模式,以及選擇性地比對其他內容,會不當無法比對。一個可能失敗的範例是 qr/_?[^\Wbar]\x{100}/
。此問題已修正。 [GH #15181]
修正了 pack()
的問題,其中 pack "H"
(和 pack "h"
)在給定非 utf8 來源和 utf8 目標時,可能會讀取超出來源。 [GH #14977]
修正了 perl 會因為區段錯誤或 C 層級斷言而中止的某些情況。 [GH #14941] [GH #14962] [GH #14963] [GH #14997] [GH #15039] [GH #15247] [GH #15251]
已修正在 Darwin 上設定 $ENV{foo}
時的記憶體外洩。 [GH #14955]
Perl 現在會在嘗試編譯具有未終止字元類別且有尾隨反斜線的模式時正確地引發錯誤。 [GH #14919]
make_trie()
中的 NOTHING
regops 和 EXACTFU_SS
regops 現在已正確處理。 [GH #14945]
Perl 現在僅在我們擁有使用 semctl()
所需的一切時才測試 semctl()
。在 FreeBSD 中,semctl()
輸入點可能存在,但它可以被政策禁用。 [GH #15180]
允許未宣告的裸字作為雜湊鍵運作的回歸已修復,儘管有嚴格限制。 [GH #15099]
作為最佳化(在 Perl 5.20.0 中引入),uc()
、lc()
、ucfirst()
和 lcfirst()
有時會就地修改其參數,而不是傳回已修改的副本。此最佳化的標準已變得更加嚴格,以避免這些函式在不應該就地修改時意外就地修改,這在某些情況下會發生,例如在 List::Util 中。
已減少編譯涉及非 ASCII 字元的某些正規表示式時過度使用記憶體。Perl 5.24.0 中將提供更完整的修復。
Perl 5.22.2 代表自 Perl 5.22.1 以來大約 5 個月的開發,並包含來自 24 位作者的 110 個檔案中約 3,000 行的變更。
不包括自動產生的檔案、文件和發行工具,大約有 1,500 行變更到 52 個 .pm、.t、.c 和 .h 檔案。
Perl 在其第三個十年中繼續蓬勃發展,這要歸功於一個充滿活力的使用者和開發人員社群。已知以下人員貢獻了成為 Perl 5.22.2 的改進
Aaron Crane、Abigail、Andreas König、Aristotle Pagaltzis、Chris 'BinGOs' Williams、Craig A. Berry、Dagfinn Ilmari Mannsåker、David Golden、David Mitchell、H.Merijn Brand、James E Keenan、Jarkko Hietaniemi、Karen Etheridge、Karl Williamson、Matthew Horsfall、Niko Tyni、Ricardo Signes、Sawyer X、Stevan Little、Steve Hay、Todd Rinaldo、Tony Cook、Vladimir Timofeev、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 移植團隊分析。
如果您回報的錯誤具有安全性影響,不適合傳送至公開封存的郵件清單,請將其傳送至 perl5-security-report@perl.org。這會指向一個封閉訂閱的未封存郵件清單,其中包含所有核心提交者,他們將能夠協助評估問題的影響,找出解決方案,並協助協調在 Perl 受支援的所有平台上發布修補程式以減輕或修復問題。請僅將此地址用於 Perl 核心中的安全性問題,而非在 CPAN 上獨立發布的模組。
Changes 檔案,說明如何查看已變更內容的詳盡詳細資料。
INSTALL 檔案,說明如何建置 Perl。
README 檔案,提供一般資訊。
Artistic 和 Copying 檔案,提供版權資訊。