在我的新 Debian Bookworm 上,/usr/share/perl5/Net/Server/Fork.pm
每次 Munin 调用该文件时,都会在日志中生成错误。记录的错误是
“在 /usr/share/perl5/Net/Server/Fork.pm 第 168 行,数字等式 (==) 中使用了未初始化的值。”
在 Debian Bullseye 中,没有错误。
顺便说一下,两个版本之间的区别如下:
5c5
< # Copyright (C) 2001-2017
---
> # Copyright (C) 2001-2022
146a147
> $self->register_child($pid, 'fork');
167c168
< if (SOCK_DGRAM == $sock->getsockopt(SOL_SOCKET,SO_TYPE)) {
---
> if (SOCK_DGRAM == unpack('i', $sock->getsockopt(SOL_SOCKET, SO_TYPE))) {
第 168 行是最后一个差异,问题就发生在这里。
我不懂 Perl,那么我该如何解决这个问题并将错误报告给 Perl 包所有者?
答案1
看起来这个问题已经报告给了github perl-net-server 问题 32。您可以添加自己的分析,看看是否能引起更好的关注。
我没有看到中央 Perl 错误跟踪系统所以你可能想把它添加到那里。如果是这样,请包含指向 github 问题的链接。
修复此问题的代码应该非常简单:
my $sockopt = unpack('i', $sock->getsockopt(SOL_SOCKET, SO_TYPE));
if (defined $sockopt and SOCK_DGRAM == $sockopt) {
假设变量名未在代码附近使用。