perl5243delta - perl v5.24.3 的新特性
本文档介绍了 5.24.2 版本和 5.24.3 版本之间的差异。
如果您要从较早版本(例如 5.24.1)升级,请先阅读 perl5242delta,其中介绍了 5.24.1 和 5.24.2 之间的差异。
使用不区分大小写的修饰符编译某些正则表达式模式可能会导致堆缓冲区溢出并使 perl 崩溃。此问题现已修复。 [GH #16021]
对于正则表达式模式中的某些类型的语法错误,错误消息可能包含随机的、可能很大的内存块的内容,或者可能使 perl 崩溃。此问题现已修复。 [GH #16025]
$ENV{$key}
堆栈缓冲区溢出Windows 上 %ENV
代码中可能存在的堆栈缓冲区溢出问题已通过完全移除缓冲区得到修复,因为该缓冲区本来就是多余的。 [GH #16051]
没有与 5.24.2 故意不兼容的更改。如果存在,则属于错误,我们请求您提交报告。请参见下文的“报告错误”。
Module::CoreList 已从版本 5.20170715_24 升级到 5.20170922_24。
POSIX 已从版本 1.65 升级到 1.65_01。
Time::HiRes 已从版本 1.9733 升级到 1.9741。
使用 GCC 6 和链接时优化(gcc 的 -flto 选项)进行构建时,Configure 将所有探测到的符号视为系统上存在的,无论它们实际是否存在。此问题已得到修复。 [GH #15322]
如果同时请求 -Duselongdouble
和 -Dusequadmath
,Configure 现在会中止。 [GH #14944]
修复了 Configure 会将 -quadmath
附加到 archname 的错误,即使它已存在。 [GH #15423]
使用 -DPERL_GLOBAL_STRUCT
或 -DPERL_GLOBAL_STRUCT_PRIVATE
的 Clang 构建已得到修复(通过禁用这些配置的线程安全分析)。
configure.com
现在识别 VSI 品牌的 C 编译器。
由于 strtoll
和 strtoull
的映射不正确,在 Perl 的 64 位版本中使用 GCC 6 构建 XS 模块时失败。此问题现已修复。 [GH #16074] [cpan #121683] [cpan #122353]
/@0{0*->@*/*0
和类似的扭曲曾经导致崩溃,但现在不会了,只会产生语法错误。 [GH #15333]
在 Perl 5.20 中,当 do
或 require
的参数是引用或类型全局变量时,如果字符串化后包含空字符,就会开始崩溃,但现在已修复。 [GH #15337]
在某些情况下,包含 &&
或 ||
运算符(或其同义词 and
和 or
)的表达式编译不正确。如果左侧由一个取反的裸字常量或一个包含常量表达式的取反的 do {}
块组成,并且右侧由一个取反的不可折叠表达式组成,则其中一个取反会被有效忽略。if
和 unless
语句修饰符也是如此,尽管左右两侧互换。这个长期存在的错误现在已修复。 [GH #15285]
当遇到除全局变量之外的存储单元条目时,带有参数的 reset
不再崩溃。 [GH #15314]
不再导致崩溃,将哈希分配给名为 *::::::
的类型全局变量,或删除该类型全局变量。 [GH #15307]
如果左侧是一个数组或哈希,则 bitwise
特性下的任何按位运算的赋值变体都会崩溃。 [GH #15346]
socket
现在会在失败时将系统返回的错误代码保留在 $!
中。 [GH #15383]
解析错误的 POSIX 字符类不再泄露内存。 [GH #15382]
自 Perl 5.20 起,当使用 -x 开关调用 perl 时,行号会偏离一个。此问题已修复。 [GH #15413]
某些子例程和文件句柄同时释放的罕见情况可能会导致崩溃,但已修复。此崩溃是在 Perl 5.22 中引入的。 [GH #15435]
一些正则表达式解析故障可能会导致正则表达式(如 /(?<=/
和 /(?<!/
)出现断言失败。此问题现已修复。 [GH #15332]
gethostent
和类似函数现在在内部执行空检查,以避免与 torsocks 库一起崩溃。这是 Perl 5.22 中的一个回归。 [GH #15478]
连续两次提到同一个常量(这是一个语法错误)不再会在调试版本中导致断言失败。这是 Perl 5.20 中的一个回归。 [GH #15017]
在 Perl 5.24 中,fchown
被更改为不接受负一作为参数,因为在某些平台上这是一个错误。然而,在某些其他平台上,这是一个可接受的参数。此更改已还原。 [GH #15523]。
@{x
后跟一个换行符,其中 "x"
表示一个控制或非 ASCII 字符,不再产生混乱的语法错误消息或崩溃。 [GH #15518]
Perl 5.24 中 tr/\N{U+...}/foo/
的一个回归(当代码点在 128 到 255 之间时)已修复。 [GH #15475]。
许多与 printf "%a"
十六进制浮点数相关的问题已修复。此外,“次正规”(以前称为“非规格化”)浮点数现在同时支持纯 IEEE 754 浮点数(64 位或 128 位)和 x86 80 位“扩展精度”。请注意,次正规十六进制浮点数文字会发出“指数下溢”警告。 [GH #15495] [GH #15502] [GH #15503] [GH #15504] [GH #15505] [GH #15510] [GH #15512]
如果一个裸字出现在 evalbytes
之后,解析器有时可能会崩溃。 [GH #15586]
修复了正则表达式解析器未在语法错误模式上正确设置语法错误的位置。 [GH #15565]
通过避免可能的内存包装,修复了 Perl 的 sprintf
实现中的一个漏洞。 [GH #15970]
Perl 5.24.3 自 Perl 5.24.2 以来大约经历了 2 个月的开发,包含来自 23 位作者的 120 个文件中大约 3200 行的更改。
排除自动生成的文件、文档和发布工具,大约有 1600 行更改到 56 个 .pm、.t、.c 和 .h 文件。
得益于活跃的用户和开发人员社区,Perl 在其第三个十年继续蓬勃发展。已知以下人员为 Perl 5.24.3 的改进做出了贡献
Aaron Crane、Craig A. Berry、Dagfinn Ilmari Mannsåker、Dan Collins、Daniel Dragan、Dave Cross、David Mitchell、Eric Herman、Father Chrysostomos、H.Merijn Brand、Hugo van der Sanden、James E Keenan、Jarkko Hietaniemi、John SJ Anderson、Karl Williamson、Ken Brown、Lukas Mai、Matthew Horsfall、Stevan Little、Steve Hay、Steven Humphrey、Tony Cook、Yves Orton。
以上列表几乎肯定不完整,因为它是由版本控制历史自动生成的。特别是,它不包括向 Perl bug 跟踪器报告问题的(非常感谢的)贡献者的姓名。
此版本中包含的许多更改源自 Perl 核心包含的 CPAN 模块。我们感谢整个 CPAN 社区帮助 Perl 蓬勃发展。
要获得 Perl 所有历史贡献者的更完整列表,请参阅 Perl 源代码发行版中的 AUTHORS 文件。
如果您发现您认为是一个错误,您可能会查看最近发布到 comp.lang.perl.misc 新闻组的文章和 https://rt.perl.org/ 上的 perl bug 数据库。Perl 主页 https://www.perl5.cn/ 上也可能会有信息。
如果您认为您有一个未报告的错误,请运行发行版中包含的 perlbug 程序。务必将您的错误精简为一个微小但足够的测试用例。您的错误报告以及 perl -V
的输出将被发送到 [email protected],供 Perl 移植团队分析。
如果您报告的错误具有安全影响,不适合发送到公开存档的邮件列表,请参阅 perlsec 中的“安全漏洞联系信息”,了解如何报告该问题。
Changes 文件,了解如何查看已更改内容的详尽详细信息。
INSTALL 文件,了解如何构建 Perl。
README 文件,了解一般信息。
Artistic 和 Copying 文件,了解版权信息。