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
,调试输出将像其他 -D 开关一样发送到 stderr
。
核心提供的工具和许多模块不再在 @INC
中的默认当前目录条目中搜索可选模块。例如,Storable 会在尝试加载 Log::Agent 之前从 @INC
中删除最后的 "."。
这可以防止攻击者将可选模块注入到另一个用户运行的进程中,而该进程的当前目录可由攻击者写入,例如 /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 新闻组的文章和 Perl 错误数据库 https://rt.perl.org/ 。您也可以在 https://www.perl5.cn/ (Perl 主页)上找到信息。
如果您认为您遇到了未报告的错误,请运行随您的版本一起提供的 perlbug 程序。请务必将您的错误缩减为一个微小但足够的测试用例。您的错误报告以及 perl -V
的输出将被发送到 [email protected],由 Perl 移植团队进行分析。
如果您要报告的错误存在安全隐患,不适合发送到公开存档的邮件列表,请将其发送到 [email protected]。该地址指向一个封闭的订阅未存档邮件列表,其中包括所有核心提交者,他们可以帮助评估问题的影响,找出解决方案,并帮助协调跨所有支持 Perl 平台发布补丁以减轻或修复问题。请仅将此地址用于 Perl 核心中的安全问题,不要用于 CPAN 上独立分发的模块。
Changes 文件,了解如何查看有关更改的详尽信息。
INSTALL 文件,了解如何构建 Perl。
README 文件,了解一般信息。
Artistic 和 Copying 文件,了解版权信息。