Package: libproc-pid-file-perl
Version: 1.27-3
Severity: important
Tags: upstream patch jessie stretch

Severity justification: cron spam from every script using Proc::PID::File to 
avoid overlapping runs.

 $ perl -MProc::PID::File -wE'die if Proc::PID::File->running({dir => "."})'
 Use of uninitialized value $fh in pattern match (m//) at 
 /usr/share/perl5/Proc/PID/File.pm line 288.

 281 sub read {
 282         my ($self, $fh) = @_;
 283 
 284         sysopen $fh, $self->{path}, O_RDWR|O_CREAT
 285                 || die qq/Cannot open pid file "$self->{path}": $!\n/;
 286         flock($fh, LOCK_EX | LOCK_NB)
 287         || die qq/pid "$self->{path}" already locked: $!\n/;
 288         my ($pid) = <$fh> =~ /^(\d+)/;
 289         close $fh if @_ == 1;
 290 
 291         $self->debug("read(\"$self->{path}\") = " . ($pid || ""));
 292         return $pid;
 293         }

The reason for the warning is that <$fh> is undefined, since the PID file is 
just created and empty.

The attached patch avoids the warning by applying the match only when <$fh> 
returns a value.

I am willing to help get this fixed (in stable too) in whatever way is 
preferred - patch (provided), NMU or takeover under the pkg-perl umbrella.

Cheers,
    dam

-- System Information:
Debian Release: stretch/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'oldstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.2.0-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=bg_BG.UTF-8, LC_CTYPE=bg_BG.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages libproc-pid-file-perl depends on:
ii  perl  5.20.2-6

Versions of packages libproc-pid-file-perl recommends:
ii  procps  2:3.3.10-4

libproc-pid-file-perl suggests no packages.

-- no debconf information
Description: fix usage of undefined value in pattern match
  $perl -MProc::PID::File -wE'die if Proc::PID::File->running({dir => "."})'
  Use of uninitialized value $fh in pattern match (m//) at·
  /usr/share/perl5/Proc/PID/File.pm line 288.
 This happens when the program runs for the first time and there is no PID
 file.
Author: Damyan Ivanov <d...@debian.org>

--- a/File.pm
+++ b/File.pm
@@ -285,7 +285,8 @@ sub read {
 		|| die qq/Cannot open pid file "$self->{path}": $!\n/;
 	flock($fh, LOCK_EX | LOCK_NB)
         || die qq/pid "$self->{path}" already locked: $!\n/;
-	my ($pid) = <$fh> =~ /^(\d+)/;
+	my $pid = <$fh>;
+        $pid =~ /^(\d+)/ if defined($pid);
 	close $fh if @_ == 1;
 
 	$self->debug("read(\"$self->{path}\") = " . ($pid || ""));

Reply via email to