Bug#908514: libnet-snmp-perl: Use of uninitialized value in pattern match (m//) at /usr/share/perl5/Net/SNMP.pm line 2620

Michael Pietsch pietsch at dsm.museum
Mon Sep 10 18:40:50 BST 2018


Package: libnet-snmp-perl
Version: 6.0.1-2
Severity: normal
Tags: patch upstream



-- System Information:
Debian Release: 9.5
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: amd64 (x86_64)

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

Versions of packages libnet-snmp-perl depends on:
ii  perl  5.24.1-3+deb9u4

libnet-snmp-perl recommends no packages.

Versions of packages libnet-snmp-perl suggests:
pn  libcrypt-des-perl        <none>
ii  libdigest-hmac-perl      1.03+dfsg-1
ii  libio-socket-inet6-perl  2.72-2

Hi,
I have a script that uses SNMP.pm to connect to a device via snmp v3. While executing the `open` sub there occures the following error due to a missing check if a variable is defined before it is used:

```
Use of uninitialized value in pattern match (m//) at /usr/share/perl5/Net/SNMP.pm line 2620.
CRITICAL - cannot create session object: Time synchronization failed during discovery
```

The variable `$this->{_error}` at this line is undefined but is beeing access by `$this->{_error} =~ /usmStatsNotInTimeWindows/`. The following patch fixes this problem by first checking if any error occured (`$this->{_error}` is defined) and only then compares its values:

```
# diff -U 3 SNMP.pm.old SNMP.pm
--- SNMP.pm.old 2018-09-10 19:19:39.200267652 +0200
+++ SNMP.pm     2018-09-10 19:18:55.449787618 +0200
@@ -2618,7 +2618,7 @@
    # assume that the synchronization has failed.

    if (($this->{_security}->discovered()) &&
-       ($this->{_error} =~ /usmStatsNotInTimeWindows/))
+       ((!$this->{_error}) || $this->{_error} =~ /usmStatsNotInTimeWindows/ ))
    {
       $this->_error_clear();
       DEBUG_INFO('discovery and synchronization complete');
```



More information about the pkg-perl-maintainers mailing list