From 70d99d67d69fc62c6cb271fa862038eec606a586 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Wed, 7 Mar 2018 10:31:11 +0100 Subject: [PATCH] vici: Make sure to read all requested data from socket in Perl binding Closes strongswan/strongswan#91. --- .../perl/Vici-Session/lib/Vici/Transport.pm | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Transport.pm b/src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Transport.pm index 6524bf76d..b0a7b6285 100644 --- a/src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Transport.pm +++ b/src/libcharon/plugins/vici/perl/Vici-Session/lib/Vici/Transport.pm @@ -22,12 +22,27 @@ sub send { sub receive { my $self = shift; my $packet_header; + + $packet_header = $self->_recv_all(4); + my $packet_len = unpack('N', $packet_header); + return $self->_recv_all($packet_len); +} + +sub _recv_all { + my ($self, $len) = @_; my $data; - $self->{'Socket'}->recv($packet_header, 4); - my $packet_len = unpack('N', $packet_header); - $self->{'Socket'}->recv($data, $packet_len); - return $data; + while ($len) + { + my $buf; + unless (defined $self->{'Socket'}->recv($buf, $len)) + { + die "error reading from socket\n"; + } + $len -= length($buf); + $data .= $buf; + } + return $data; } 1;