From 6955b329a0a2c45a8c1a3f243f555ae794d984c8 Mon Sep 17 00:00:00 2001 From: Steve Hancock Date: Fri, 18 Oct 2024 17:13:16 -0700 Subject: [PATCH] add some loop safety checks --- lib/Perl/Tidy/Formatter.pm | 56 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/lib/Perl/Tidy/Formatter.pm b/lib/Perl/Tidy/Formatter.pm index 51d4b7ad..12b85079 100644 --- a/lib/Perl/Tidy/Formatter.pm +++ b/lib/Perl/Tidy/Formatter.pm @@ -1293,6 +1293,40 @@ sub check_token_array { } } } + + # Check the array $rK_next_seqno_by_K->[$KK] + my $Klimit = @{$rLL} - 1; + my $K_last_seqno; + my $rK_next_seqno_by_K = $self->[_rK_next_seqno_by_K_]; + foreach my $KK ( 0 .. $Klimit ) { + my $K_next_seqno = $rK_next_seqno_by_K->[$KK]; + if ( !defined($K_next_seqno) ) { $K_last_seqno = $KK; last } + if ( $K_next_seqno <= $KK || $K_next_seqno > $Klimit ) { + Fault(<[$K_next_seqno]->[_TYPE_SEQUENCE_] ) { + Fault(<[$KK]; + next if ( !defined($Ktest) ); + Fault(<odd field count is ok, 2=>want even count + + # Return: + # $number_of_fields = updated number of items per line + if ( $number_of_fields >= $odd_or_even * 2 && $formatted_lines > 0 ) { my $min_fields = $number_of_fields; + if ( $odd_or_even < 1 ) { + ## shouldn't happen + DEVEL_MODE && Fault("bad value for odd_or_even=$odd_or_even\n"); + return $number_of_fields; + } + while ($min_fields >= $odd_or_even && $min_fields * $formatted_lines >= $item_count ) { -- 2.39.5