From 1334102e03c47615e683479ce2eb1ede4bf5864b Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Wed, 6 Jun 2018 11:30:12 +0200 Subject: [PATCH] parse_web_socket_frame: use $wsbuf_ref directly, so that we really consume data Signed-off-by: Dietmar Maurer --- PVE/APIClient/Commands/lxc.pm | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/PVE/APIClient/Commands/lxc.pm b/PVE/APIClient/Commands/lxc.pm index 346df51..df72625 100644 --- a/PVE/APIClient/Commands/lxc.pm +++ b/PVE/APIClient/Commands/lxc.pm @@ -71,15 +71,13 @@ my $create_websockt_frame = sub { my $parse_web_socket_frame = sub { my ($wsbuf_ref) = @_; - my $wsbuf = $$wsbuf_ref; - my $payload; my $req_close = 0; - while (my $len = length($wsbuf)) { + while (my $len = length($$wsbuf_ref)) { last if $len < 2; - my $hdr = unpack('C', substr($wsbuf, 0, 1)); + my $hdr = unpack('C', substr($$wsbuf_ref, 0, 1)); my $opcode = $hdr & 0b00001111; my $fin = $hdr & 0b10000000; @@ -88,7 +86,7 @@ my $parse_web_socket_frame = sub { my $rsv = $hdr & 0b01110000; die "received websocket frame with RSV flags\n" if $rsv; - my $payload_len = unpack 'C', substr($wsbuf, 1, 1); + my $payload_len = unpack 'C', substr($$wsbuf_ref, 1, 1); my $masked = $payload_len & 0b10000000; die "received masked websocket frame from server\n" if $masked; @@ -97,11 +95,11 @@ my $parse_web_socket_frame = sub { $payload_len = $payload_len & 0b01111111; if ($payload_len == 126) { last if $len < 4; - $payload_len = unpack('n', substr($wsbuf, $offset, 2)); + $payload_len = unpack('n', substr($$wsbuf_ref, $offset, 2)); $offset += 2; } elsif ($payload_len == 127) { last if $len < 10; - $payload_len = unpack('Q>', substr($wsbuf, $offset, 8)); + $payload_len = unpack('Q>', substr($$wsbuf_ref, $offset, 8)); $offset += 8; } @@ -110,7 +108,7 @@ my $parse_web_socket_frame = sub { last if $len < ($offset + $payload_len); - my $data = substr($wsbuf, 0, $offset + $payload_len, ''); # now consume data + my $data = substr($$wsbuf_ref, 0, $offset + $payload_len, ''); # now consume data my $frame_data = substr($data, $offset, $payload_len); -- 2.39.2