This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Check for max length before derefing by length.
authorJarkko Hietaniemi <jhi@iki.fi>
Mon, 29 Feb 2016 11:50:58 +0000 (06:50 -0500)
committerJarkko Hietaniemi <jhi@iki.fi>
Tue, 1 Mar 2016 01:44:19 +0000 (20:44 -0500)
Coverity CID 135025 (#1 of 1): Out-of-bounds read (OVERRUN)
29. overrun-local: Overrunning array addr.sun_path of 108 bytes at byte offset 108 using index addr_len (which evaluates to 108).
 864                for (addr_len = 0; addr.sun_path[addr_len]
 28. incr: Incrementing addr_len. The value of addr_len may now be up to 108.
 865                     && addr_len < maxlen; addr_len++);

Reported upstream as

https://rt.cpan.org/Ticket/Display.html?id=111707

cpan/Socket/Socket.xs

index 52df483..3b1d70e 100644 (file)
@@ -861,8 +861,8 @@ unpack_sockaddr_un(sun_sv)
 #   else
                const int maxlen = (int)sizeof(addr.sun_path);
 #   endif
-               for (addr_len = 0; addr.sun_path[addr_len]
-                    && addr_len < maxlen; addr_len++);
+               for (addr_len = 0; addr_len < maxlen
+                    && addr.sun_path[addr_len]; addr_len++);
        }
 
        ST(0) = sv_2mortal(newSVpvn(addr.sun_path, addr_len));