[patch] perlbal dies invalid host passed to sockaddr_in

Fred Moyer fred at redhotpenguin.com
Thu Dec 6 20:29:21 UTC 2007


I happened on this bug by chance when I passed an unresolvable hostname in
a request to perlbal, and Socket::sockaddr_in croaked and killed perlbal.

What is interesting is that the first time I passed the invalid hostname,
the ip resolved to, but didn't resolve the second time an
invalid hostname was passed, and perlbal died.  I didn't take the time to
figure out why.

This is likely not a big problem for anyone but me but here is the patch
to fix it nonetheless.

Index: lib/Perlbal/BackendHTTP.pm
--- lib/Perlbal/BackendHTTP.pm  (revision 734)
+++ lib/Perlbal/BackendHTTP.pm  (working copy)
@@ -71,9 +71,14 @@
         Perlbal::log('crit', "Error creating socket: $!");
         return undef;
+    my $inet_aton = Socket::inet_aton($ip);
+    unless ($inet_aton) {
+        Perlbal::log('crit', "inet_aton failed creating socket for $ip");
+        return undef;
+    }
     IO::Handle::blocking($sock, 0);
-    connect $sock, Socket::sockaddr_in($port, Socket::inet_aton($ip));
+    connect $sock, Socket::sockaddr_in($port, $inet_aton);

     my $self = fields::new($class);

More information about the perlbal mailing list