Skip to content

Commit

Permalink
[backend] BSSSL: fix EOF handling in data_available
Browse files Browse the repository at this point in the history
In case of EOF, the peek function will return (undef, 0).
The openssl documentation says that we must treat a zero
return vale as an error and have to call get_error().
  • Loading branch information
mlschroe committed Oct 6, 2023
1 parent cbcffc0 commit b501203
Showing 1 changed file with 3 additions and 4 deletions.
7 changes: 3 additions & 4 deletions src/backend/BSSSL.pm
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ sub READ {
my $buf = \$_[1];
$! = 0;
my ($r, $rv) = Net::SSLeay::read($sslr->[0]);
if ($rv && $rv < 0) {
if ($rv <= 0) {
my $code = Net::SSLeay::get_error($sslr->[0], $rv);
return 0 if $code == &Net::SSLeay::ERROR_WANT_READ && ssl_iseof($sslr->[0]);
$! = POSIX::EINTR if $code == &Net::SSLeay::ERROR_WANT_READ || $code == &Net::SSLeay::ERROR_WANT_WRITE;
Expand Down Expand Up @@ -265,12 +265,11 @@ sub DESTROY {
sub data_available {
my ($sslr) = @_;
my ($r, $rv) = Net::SSLeay::peek($sslr->[0], 1);
if ($rv && $rv < 0) {
if ($rv <= 0) {
my $code = Net::SSLeay::get_error($sslr->[0], $rv);
return 0 if $code == &Net::SSLeay::ERROR_WANT_READ || $code == &Net::SSLeay::ERROR_WANT_WRITE;
return undef;
}
return defined($r) ? 1 : 0;
return defined($r) ? 1 : undef;
}

sub peerfingerprint {
Expand Down

0 comments on commit b501203

Please sign in to comment.