]> Sergey Matveev's repositories - public-inbox.git/commitdiff
lei_query: fix relative path handling on --stdin
authorEric Wong <e@80x24.org>
Sat, 17 Apr 2021 09:47:11 +0000 (09:47 +0000)
committerEric Wong <e@80x24.org>
Sat, 17 Apr 2021 10:00:45 +0000 (10:00 +0000)
Since --stdin could be waiting on user keyboard input or
something else slow, we handle it in the event loop.  That
means other commands can change the working directory of
lei-daemon while a query is being trickled to us via stdin.

Rearranging query handling internals to delay opening the
--output destination in commit 26e0fe73de93f451 meant
another command could throw off our --output pathname if
it is relative.

Fixes: 26e0fe73de93f451 ("lei_query: rearrange internals to capture query early")
lib/PublicInbox/LeiQuery.pm

index 7ddba4cf27398603855e56df67416aef52d0645d..385ba0a9b4cad38af59a23913b703344eb05339f 100644 (file)
@@ -53,6 +53,9 @@ sub qstr_add { # PublicInbox::InputPipe::consume callback for --stdin
        my ($self) = @_; # $_[1] = $rbuf
        if (defined($_[1])) {
                $_[1] eq '' and return eval {
+                       if (my $dfd = $self->{3}) {
+                               chdir($dfd) or return $self->fail("fchdir: $!");
+                       }
                        $self->{mset_opt}->{q_raw} = $self->{mset_opt}->{qstr};
                        $self->{lse}->query_approxidate($self->{lse}->git,
                                                $self->{mset_opt}->{qstr});