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 不兼容的更改。如果存在,它们是 bug,我们要求您提交报告。请参阅下面的 "报告 Bug"。
File::Spec 已从版本 3.56 升级到 3.56_01。
canonpath()
现在保留 taint。请参阅 "修复 canonpath()
中的 taint 丢失"。
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 构建现在可以在需要使用 .d 文件中的探测器输入对象文件的较新 dtrace 的系统上成功构建。
以前,探测器会失败并导致构建失败。
Configure 不再默认探测 libnm。最初这是“新数学”库,但 GNOME NetworkManager 已重新使用了该名称。
Configure 现在了解 gcc 5。
使用 -DPERL_MEM_LOG 编译 perl 现在可以再次工作。
在 Darwin 上使用 -Dusecbacktrace 编译 perl 现在可以再次工作。
在 OS X 上从终端构建或测试时,同时启用 -DDEBUGGING 和线程的构建将失败,并出现“panic: free from wrong pool”错误。这是由于 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
regop 和 EXACTFU_SS
regop 现在得到妥善处理。 [GH #14945]
如果我们拥有使用 semctl()
所需的一切,Perl 现在只测试 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 bug 跟踪器报告问题的(非常感谢的)贡献者的姓名。
此版本中包含的许多更改源自 Perl 核心包含的 CPAN 模块。我们感谢整个 CPAN 社区帮助 Perl 蓬勃发展。
有关 Perl 所有历史贡献者的更完整列表,请参阅 Perl 源代码发行版中的 AUTHORS 文件。
如果您发现您认为是 Bug 的内容,您可以查看最近发布到 comp.lang.perl.misc 新闻组和 https://rt.perl.org/ 上的 Perl Bug 数据库中的文章。Perl 主页 https://www.perl5.cn/ 上也可能会有信息。
如果您认为您有未报告的 Bug,请运行发行版中包含的 perlbug 程序。务必将您的 Bug 精简为一个微小但充分的测试用例。您的 Bug 报告以及 perl -V
的输出将被发送到 [email protected],供 Perl 移植团队分析。
如果您报告的 Bug 具有安全隐患,不适合发送到公开存档的邮件列表,请将其发送到 [email protected]。这指向一个封闭的订阅未存档的邮件列表,其中包括所有核心提交者,他们将能够帮助评估问题的严重性,找出解决方案,并帮助协调发布补丁以减轻或修复所有支持 Perl 的平台上的问题。请仅将此地址用于 Perl 核心中的安全问题,而不是用于 CPAN 上独立分发的模块。
Changes 文件,了解如何查看有关更改内容的详尽详细信息。
INSTALL 文件,了解如何构建 Perl。
README 文件,了解一般信息。
Artistic 和 Copying 文件,了解版权信息。