perl5223delta - perl v5.22.3 的新功能
此文件說明 5.22.2 版與 5.22.3 版之間的差異。
如果您要從較早的版本(例如 5.22.1)升級,請先閱讀 perl5222delta,其中說明了 5.22.1 與 5.22.2 之間的差異。
先前,如果 perl 沒有執行 setuid,且尚未剖析 -T 或 -t 開關,則 PerlIO 除錯輸出會傳送至 PERLIO_DEBUG
環境變數指定的檔案。
如果 perl 在尚未解析其開關時執行輸出,這可能會導致 perl 建立或覆寫由 PERLIO_DEBUG
命名的檔案,即使已提供 -T 開關。
Perl 現在需要 -Di 開關才能產生 PerlIO 除錯輸出。預設情況下,這會寫入 stderr
,但可以選擇透過設定 PERLIO_DEBUG
環境變數將其重新導向至檔案。
如果 perl 正在執行 setuid 或已提供 -T 開關,則會忽略 PERLIO_DEBUG
,且除錯輸出會傳送至 stderr
,就像任何其他 -D 開關一樣。
核心提供的工具和許多模組不再搜尋 @INC
中的預設目前目錄項目以尋找選用模組。例如,Storable 會從 @INC
中移除最後一個 ".",然後再嘗試載入 Log::Agent。
這可以防止攻擊者將選用模組注入到由其他使用者執行的程序中,而該程序的目前目錄可供攻擊者寫入,例如 /tmp 目錄。
在大多數情況下,此移除動作不應造成問題,但會遇到 base 的困難,它將提供的每個模組名稱都視為選用模組。這些困難尚未解決,因此在此版本中,base 沒有任何變更。我們希望在 Perl 5.22.4 中修復 base。
若要保護您自己的程式碼免於此攻擊,請在指令碼開頭從 @INC
中移除預設的 "." 項目,因此
#!/usr/bin/perl
use strict;
...
會變成
#!/usr/bin/perl
BEGIN { pop @INC if $INC[-1] eq '.' }
use strict;
...
或對於模組,從區域化的 @INC
中移除 ".",因此
my $can_foo = eval { require Foo; }
會變成
my $can_foo = eval {
local @INC = @INC;
pop @INC if $INC[-1] eq '.';
require Foo;
};
除了上述安全性變更之外,沒有任何變更與 Perl 5.22.2 故意不相容。如果存在任何變更,它們就是錯誤,我們要求您提交報告。請參閱下方的 "報告錯誤"。
Archive::Tar 已從版本 2.04 升級至 2.04_01。
bignum 已從版本 0.39 升級至 0.39_01。
CPAN 已從版本 2.11 升級至 2.11_01。
Digest 已從版本 1.17 升級至 1.17_01。
Digest::SHA 已從版本 5.95 升級至 5.95_01。
Encode 已從版本 2.72 升級至 2.72_01。
ExtUtils::Command 已從版本 1.20 升級至 1.20_01。
ExtUtils::MakeMaker 已從版本 7.04_01 升級至 7.04_02。
File::Fetch 已從版本 0.48 升級至 0.48_01。
File::Spec 已從版本 3.56_01 升級至 3.56_02。
HTTP::Tiny 已從版本 0.054 升級至 0.054_01。
IO 已從版本 1.35 升級至 1.35_01。
IO-Compress 模組已從版本 2.068 升級至 2.068_001。
IPC::Cmd 已從版本 0.92 升級至 0.92_01。
JSON::PP 已從版本 2.27300 升級至 2.27300_01。
Locale::Maketext 已從版本 1.26 升級至 1.26_01。
Locale::Maketext::Simple 已從版本 0.21 升級至 0.21_01。
Memoize 已從版本 1.03 升級至 1.03_01。
Module::CoreList 已從版本 5.20160429 升級至 5.20170114_22。
Net::Ping 已從版本 2.43 升級至 2.43_01。
Parse::CPAN::Meta 已從版本 1.4414 升級至 1.4414_001。
Pod::Html 已從版本 1.22 升級至 1.2201。
Pod::Perldoc 已從版本 3.25 升級至 3.25_01。
Storable 已從版本 2.53_01 升級至 2.53_02。
Sys::Syslog 已從版本 0.33 升級至 0.33_01。
Test 已從版本 1.26 升級至 1.26_01。
Test::Harness 已從版本 3.35 升級至 3.35_01。
XSLoader 已從版本 0.20 升級至 0.20_01,修正了一個安全性漏洞,該漏洞可能導致二進位檔案從 @INC
以外的路徑載入。 [GH #15418]
PERLIO_DEBUG
的文件已更新。
新的 -Di 參數已記錄,且 PERLIO_DEBUG
的文件已更新。
已新增一個新的測試腳本 t/run/switchDx.t,用於測試新的 -Di 參數是否運作正常。
PadlistNAMES
巨集再次成為左值。
Perl 5.22.3 自 Perl 5.22.2 以來約歷經 9 個月的開發,包含來自 20 位作者、橫跨 240 個檔案的約 4,400 行變更。
排除自動產生的檔案、文件和發行工具,大約有 2,200 行變更至 170 個 .pm、.t、.c 和 .h 檔案。
Perl 在使用者和開發人員熱絡的社群支持下,持續在第三個十年蓬勃發展。以下人員已知對 Perl 5.22.3 的改進有貢獻
Aaron Crane、Abigail、Alex Vandiver、Aristotle Pagaltzis、Chad Granum、Chris 'BinGOs' Williams、Craig A. Berry、David Mitchell、Father Chrysostomos、James E Keenan、Jarkko Hietaniemi、Karen Etheridge、Karl Williamson、Matthew Horsfall、Niko Tyni、Ricardo Signes、Sawyer X、Stevan Little、Steve Hay、Tony Cook。
上述清單幾乎可以確定不完整,因為它是自動從版本控制歷程產生。特別是,它不包含向 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 上獨立發行的模組。
變更 檔案說明如何檢視已變更內容的詳盡詳細資料。
安裝 檔案說明如何建置 Perl。
一般事項的 README 檔案。
版權資訊的 Artistic 和 Copying 檔案。