目录

名称

perl5222delta - perl v5.22.2 的新增功能

说明

本文档描述了 5.22.1 版本和 5.22.2 版本之间的差异。

如果您要从较早的版本(例如 5.22.0)进行升级,请首先阅读 perl5221delta,其中描述了 5.22.0 和 5.22.1 之间的差异。

安全性

修复 Win32 路径处理中的越界访问

这是 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 修复此问题。

[GH #15135]

避免在 Win32 crypt() 中访问未初始化的内存

已添加验证,该验证将检测 salt 中的短 salt 和无效字符。

[GH #15091]

environ 中删除重复的环境变量

以前,如果环境变量在 environ[] 中出现多次,则 %ENV 将包含该名称的最后一个条目,而典型的 getenv() 将返回第一个条目。我们现在确保 %ENV 包含与 getenv() 返回的内容相同的内容。

其次,我们现在从 environ[] 中删除重复项,因此如果在 %ENV 中设置了具有该名称的设置,我们将不会向子进程传递不安全的值。

这是 CVE-2016-2381。

不兼容的更改

没有故意与 Perl 5.22.1 不兼容的更改。如果存在,它们是 bug,我们要求您提交报告。请参阅下面的 "报告 Bug"

模块和元编程

更新的模块和元编程

文档

现有文档的更改

perldiag

perlfunc

配置和编译

平台支持

特定于平台的说明

Darwin

在 Darwin 上使用 -Dusecbacktrace 编译 perl 现在可以再次工作。

[GH #15245]

OS X/Darwin

在 OS X 上从终端构建或测试时,同时启用 -DDEBUGGING 和线程的构建将失败,并出现“panic: free from wrong pool”错误。这是由于 perl 对环境的内部管理与使用 libc setenv() 函数更新环境的 atfork 处理程序冲突造成的。

Perl 现在使用 setenv()/unsetenv() 在 OS X 上更新环境。

[GH #14955]

ppc64el

ppc64el(Debian 中小端 PowerPC 的命名)的浮点数格式现在可以正确检测。

Tru64

t/porting/extrefs.t 中的测试故障已修复。

内部变更

已选择的错误修复

致谢

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

如果您发现您认为是 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 文件,了解一般信息。

ArtisticCopying 文件,了解版权信息。