Mercurial > hg > nginx-tests
comparison lib/Test/Nginx/HTTP3.pm @ 1905:f35824e75b66
Tests: fixed reading QUIC streams on Perl < 5.24.
The parse_stream() routine has had a missing explicit return if there were no
streams received. In Perl < 5.24 this used to return no value, or an empty
array in the list context. In modern Perl this returns an empty value, or an
array of 1 element, which made the check for last index of the returned array
work rather by accident.
The fix is to return explicitly and to check the array size in callers instead.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Tue, 06 Jun 2023 18:50:07 +0400 |
parents | 8303f3633f65 |
children | 1baf5fe1d86c |
comparison
equal
deleted
inserted
replaced
1904:c04134b0290b | 1905:f35824e75b66 |
---|---|
1945 my ($level, $plaintext, @data); | 1945 my ($level, $plaintext, @data); |
1946 my $s = $self->{socket}; | 1946 my $s = $self->{socket}; |
1947 | 1947 |
1948 while (1) { | 1948 while (1) { |
1949 @data = $self->parse_stream(); | 1949 @data = $self->parse_stream(); |
1950 return @data if $#data; | 1950 return @data if @data; |
1951 return if scalar @{$self->{frames_in}}; | 1951 return if scalar @{$self->{frames_in}}; |
1952 | 1952 |
1953 again: | 1953 again: |
1954 my $txt; | 1954 my $txt; |
1955 | 1955 |
1971 goto again; | 1971 goto again; |
1972 } | 1972 } |
1973 goto retry if $self->{token}; | 1973 goto retry if $self->{token}; |
1974 $self->handle_frames(parse_frames($plaintext), $level); | 1974 $self->handle_frames(parse_frames($plaintext), $level); |
1975 @data = $self->parse_stream(); | 1975 @data = $self->parse_stream(); |
1976 return @data if $#data; | 1976 return @data if @data; |
1977 return if scalar @{$self->{frames_in}}; | 1977 return if scalar @{$self->{frames_in}}; |
1978 } | 1978 } |
1979 } | 1979 } |
1980 return; | 1980 return; |
1981 } | 1981 } |
2003 | 2003 |
2004 next if !defined $data; | 2004 next if !defined $data; |
2005 | 2005 |
2006 return ($i, $data, $stream->{eof} ? 1 : 0); | 2006 return ($i, $data, $stream->{eof} ? 1 : 0); |
2007 } | 2007 } |
2008 return; | |
2008 } | 2009 } |
2009 | 2010 |
2010 ############################################################################### | 2011 ############################################################################### |
2011 | 2012 |
2012 sub read_tls_message { | 2013 sub read_tls_message { |