From: Eric Wong Date: Tue, 3 Oct 2023 06:43:45 +0000 (+0000) Subject: net_reader: bail out on NNTP SOCKS connection failure X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=699eeb49a23399671f8ed0fa142d6cdaa0593b60;p=thirdparty%2Fpublic-inbox.git net_reader: bail out on NNTP SOCKS connection failure It takes some effort to get Net::NNTP and IO::Socket::Socks to place nice together, but we don't want the setsockopt call to fail on an undefined value. So die with an error that tries to show various possible error sources. $SOCKS_ERROR is a special variable, so even using `//' (defined-or) operator isn't enough to squelch warnings about using it in its uninitialized state. --- diff --git a/lib/PublicInbox/NetNNTPSocks.pm b/lib/PublicInbox/NetNNTPSocks.pm index fcd2e5803..5b15dd595 100644 --- a/lib/PublicInbox/NetNNTPSocks.pm +++ b/lib/PublicInbox/NetNNTPSocks.pm @@ -17,16 +17,18 @@ sub new_socks { local %OPT = map {; defined($opt{$_}) ? ($_ => $opt{$_}) : () } @SOCKS_KEYS; - Net::NNTP->new(%opt); # this calls our new() below: + no warnings 'uninitialized'; # needed for $SOCKS_ERROR + Net::NNTP->new(%opt) // die "errors: \$!=$! SOCKS=", + eval('$IO::Socket::Socks::SOCKS_ERROR // ""'), + ', SSL=', + (eval('IO::Socket::SSL->errstr') // ''), "\n"; } # called by Net::NNTP->new sub new { my ($self, %opt) = @_; @OPT{qw(ConnectAddr ConnectPort)} = @opt{qw(PeerAddr PeerPort)}; - my $ret = $self->SUPER::new(%OPT) or - die 'SOCKS error: '.eval('$IO::Socket::Socks::SOCKS_ERROR'); - $ret; + $self->SUPER::new(%OPT); } 1; diff --git a/lib/PublicInbox/NetReader.pm b/lib/PublicInbox/NetReader.pm index 6802fa72c..32e4c20ff 100644 --- a/lib/PublicInbox/NetReader.pm +++ b/lib/PublicInbox/NetReader.pm @@ -180,8 +180,7 @@ sub nn_new ($$$) { if (defined $nn_arg->{ProxyAddr}) { require PublicInbox::NetNNTPSocks; $nn_arg->{SocksDebug} = 1 if $nn_arg->{Debug}; - eval { $nn = PublicInbox::NetNNTPSocks->new_socks(%$nn_arg) }; - die "E: <$uri> $@\n" if $@; + $nn = PublicInbox::NetNNTPSocks->new_socks(%$nn_arg) or return; } else { $nn = Net::NNTP->new(%$nn_arg) or return; }