diff options
Diffstat (limited to '')
-rw-r--r-- | lib/LWPx/ParanoidAgent.pm | 7 | ||||
-rwxr-xr-x | t/00-all.t | 7 |
2 files changed, 11 insertions, 3 deletions
diff --git a/lib/LWPx/ParanoidAgent.pm b/lib/LWPx/ParanoidAgent.pm index 0db4380..bc2669b 100644 --- a/lib/LWPx/ParanoidAgent.pm +++ b/lib/LWPx/ParanoidAgent.pm @@ -137,6 +137,8 @@ sub _bad_host { my $addr; # network order packed IP address + return 0 if ((not @parts) || (@parts > 4)); + if (@parts == 1) { # a - 32 bits return 1 if @@ -196,8 +198,9 @@ sub request { $first_res = $first_res->previous while $first_res && $first_res->previous; $req->{_time_begin} = $first_res ? $first_res->request->{_time_begin} : time(); - my $host = $req->uri->host; - if ($self->_bad_host($host)) { + my $host; + eval { $host = $req->uri->host }; + if ($@ || !$host || $self->_bad_host($host)) { my $err_res = HTTP::Response->new(403, "Unauthorized access to blocked host"); $err_res->request($req); $err_res->header("Client-Date" => HTTP::Date::time2str(time)); diff --git a/t/00-all.t b/t/00-all.t index eddfb7c..45477bd 100755 --- a/t/00-all.t +++ b/t/00-all.t @@ -4,7 +4,7 @@ use strict; use LWPx::ParanoidAgent; use Time::HiRes qw(time); -use Test::More tests => 29; +use Test::More tests => 30; use Net::DNS; use IO::Socket::INET; @@ -96,6 +96,11 @@ ok(! $res->is_success); like($res->status_line, qr/DNS lookup resulted in bad host/); $ua->resolver($old_resolver); +# can't do empty host name +$res = $ua->get(''); +print $res->status_line, "\n"; +ok(! $res->is_success); + # black-listed via blocked_hosts $res = $ua->get("http://brad.lj/"); print $res->status_line, "\n"; |