]> Sergey Matveev's repositories - public-inbox.git/commitdiff
lei completion: workaround old Perl bug
authorEric Wong <e@80x24.org>
Mon, 27 Sep 2021 21:05:45 +0000 (16:05 -0500)
committerEric Wong <e@80x24.org>
Mon, 27 Sep 2021 21:08:35 +0000 (21:08 +0000)
While `$argv[-1]' is `undef' on an empty @argv, using `$argv[-1]'
as a subroutine argument would fail incorrectly with:

    Modification of non-creatable array value attempted, subscript -1 at ...

...even though we'd never attempt to modify @_ itself in the
subroutines being called.  Work around the bug (tested on
5.16.3) by passing `undef' explicitly when `$argv[-1]' is
already `undef'.

Reported-by: Konstantin Ryabitsev <konstantin@linuxfoundation.org>
Link: https://public-inbox.org/meta/20210927124056.kj5okiefvs4ztk27@meerkat.local/
lib/PublicInbox/LeiExportKw.pm
lib/PublicInbox/LeiImport.pm
lib/PublicInbox/LeiLsMailSource.pm
lib/PublicInbox/LeiRefreshMailSync.pm

index cea9beeb569424315aaf57ff5536d0696148408a..0b65c27626336ac679c2bab3ce815240d1e73986 100644 (file)
@@ -131,7 +131,7 @@ sub _complete_export_kw {
        my $match_cb = $lei->complete_url_prepare(\@argv);
        # filter-out read-only sources:
        my @k = grep(!m!(?://;AUTH=ANONYMOUS\@|\A(?:nntps?|s?news)://)!,
-                       $lms->folders($argv[-1], 1));
+                       $lms->folders($argv[-1] // undef, 1));
        my @m = map { $match_cb->($_) } @k;
        @m ? @m : @k;
 }
index 397292d4c7878e4192aa5766a2fa7188166352bd..69d63ab6b39756f96a89deb49422fb9eaadcb444 100644 (file)
@@ -122,11 +122,11 @@ sub lei_import { # the main "lei import" method
 sub _complete_import {
        my ($lei, @argv) = @_;
        my ($re, $cur, $match_cb) = $lei->complete_url_prepare(\@argv);
-       my @k = $lei->url_folder_cache->keys($argv[-1], 1);
+       my @k = $lei->url_folder_cache->keys($argv[-1] // undef, 1);
        my @m = map { $match_cb->($_) } @k;
        my %f = map { $_ => 1 } (@m ? @m : @k);
        if (my $lms = $lei->lms) {
-               @k = $lms->folders($argv[-1], 1);
+               @k = $lms->folders($argv[-1] // undef, 1);
                @m = map { $match_cb->($_) } @k;
                if (@m) { @f{@m} = @m } else { @f{@k} = @k }
        }
index 1db15d5742b557966f41cce9ede496b49ced4380..7c3c0cda18d61365bb982990ac7f83ec3ec3516f 100644 (file)
@@ -107,11 +107,11 @@ sub lei_ls_mail_source {
 sub _complete_ls_mail_source {
        my ($lei, @argv) = @_;
        my $match_cb = $lei->complete_url_prepare(\@argv);
-       my @k = $lei->url_folder_cache->keys($argv[-1], 1);
+       my @k = $lei->url_folder_cache->keys($argv[-1] // undef, 1);
        my @m = map { $match_cb->($_) } @k;
        my %f = map { $_ => 1 } (@m ? @m : @k);
        if (my $lms = $lei->lms) {
-               @k = $lms->folders($argv[-1], 1);
+               @k = $lms->folders($argv[-1] // undef, 1);
                @m = map { $match_cb->($_) } grep(m!\A[a-z]+://!, @k);
                if (@m) { @f{@m} = @m } else { @f{@k} = @k }
        }
index eb842843b51dece6664aad113e26efa4d22b4096..0cb9f3dccd48ae934937541453692fd492c91e4a 100644 (file)
@@ -101,7 +101,7 @@ sub _complete_refresh_mail_sync {
        my ($lei, @argv) = @_;
        my $lms = $lei->lms or return ();
        my $match_cb = $lei->complete_url_prepare(\@argv);
-       my @k = $lms->folders($argv[-1], 1);
+       my @k = $lms->folders($argv[-1] // undef, 1);
        my @m = map { $match_cb->($_) } @k;
        @m ? @m : @k
 }