TLSProxy/Proxy.pm: refine partial packet handling.
authorAndy Polyakov <appro@openssl.org>
Fri, 6 Apr 2018 09:33:16 +0000 (11:33 +0200)
committerAndy Polyakov <appro@openssl.org>
Sun, 8 Apr 2018 09:42:41 +0000 (11:42 +0200)
Original logic was "if no records found *or* last one is truncated, then
leave complete records in queue." Trouble is that if we don't pass on
complete records and get complete packet in opposite direction, then
queued records will go back to sender. In other words complete records
should always be passed on. [Possible alternative would be to match
direction in reconstruct_record.]

Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/5887)

util/perl/TLSProxy/Proxy.pm

index 8f7f983ebc9bf0b5d8b8ea099713e7f5cc5c5013..b3b2fec09008e38a7f7dbfd87f2abda267649ac4 100644 (file)
@@ -456,14 +456,15 @@ sub process_packet
 
     #Return contains the list of record found in the packet followed by the
     #list of messages in those records and any partial message
-    my @ret = TLSProxy::Record->get_records($server, $self->flight, $self->{partial}[$server].$packet);
+    my @ret = TLSProxy::Record->get_records($server, $self->flight,
+                                            $self->{partial}[$server].$packet);
     $self->{partial}[$server] = $ret[2];
     push @{$self->{record_list}}, @{$ret[0]};
     push @{$self->{message_list}}, @{$ret[1]};
 
     print "\n";
 
-    if (scalar(@{$ret[0]}) == 0 or length($ret[2]) != 0) {
+    if (scalar(@{$ret[0]}) == 0) {
         return "";
     }