Ticket #41000

endless loop when command completion after ./vi kicks in

Open Date: 2020-11-22 04:39 Last Update: 2020-11-22 14:33

Reporter:
(Anonymous)
Owner:
Type:
Status:
Open [Owner assigned]
Component:
MileStone:
(None)
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
None
File:
None
Vote
Score: 0
No votes
0.0% (0/0)
0.0% (0/0)

Details

after compiling https://github.com/aligrudi/neatvi, when i cd into the dir and type ./vi viTAB in the yash shell, yash goes into an endless loop. it seems to try to read input from fd3, and whenever i type something it reads that character and waits for the next, but never outputs anything. i straced it and figured it's trying to execute completion/vi followed by completion/ex. note that this happens on sabotage linux, where musl libc 1.1.24 is the main libc.

here's the last couple lines from strace output:

  1. fcntl(1, F_DUPFD_CLOEXEC, 100) = 102
  2. fcntl(102, F_SETFD, FD_CLOEXEC) = 0
  3. open("/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
  4. close(1) = 0
  5. dup2(3, 1) = 1
  6. close(3) = 0
  7. fcntl(2, F_DUPFD_CLOEXEC, 100) = 103
  8. fcntl(103, F_SETFD, FD_CLOEXEC) = 0
  9. close(2) = 0
  10. dup2(1, 2) = 2
  11. writev(1, [{"completion/ex", 13}, {"\n", 1}], 2) = 14
  12. close(2) = 0
  13. dup2(103, 2) = 2
  14. close(103) = 0
  15. close(1) = 0
  16. dup2(102, 1) = 1
  17. close(102) = 0
  18. rt_sigprocmask(SIG_SETMASK, [], [INT CHLD WINCH], 8) = 0
  19. ...
  20. pipe([3, 4]) = 0
  21. rt_sigprocmask(SIG_BLOCK, ~[RTMIN 33 34], [INT CHLD WINCH], 8) = 0
  22. rt_sigprocmask(SIG_BLOCK, ~[], ~[KILL STOP RTMIN 33 34], 8) = 0
  23. fork() = 5022
  24. rt_sigprocmask(SIG_SETMASK, ~[KILL STOP RTMIN 33 34], NULL, 8) = 0
  25. rt_sigprocmask(SIG_SETMASK, [INT CHLD WINCH], NULL, 8) = 0
  26. close(4) = 0
  27. read(3, "\33[m", 1024) = 3
  28. read(3, "\33[1;1H\33[K \33[2;1H\33[K~ $
  29. read(3, " \33[13;1H\33[K~ \33[14;$
  30. read(3, " \33[24;1H\33[K \33[1;1H\33[1;1H", 1024) = 115
  31. read(3,

btw, congrats, thanks to yash this bug was found in musl libc: https://www.openwall.com/lists/musl/2020/11/19/1 (i actually found it when trying to rm file_with_utf_chars_in_ittab).

so i'm not sure whether this is a bug in yash 2.50 or musl libc, but this is beyond my expertise to debug it, as it involves arcane knowledge about yash internals to debug it.

Ticket History (3/4 Histories)

2020-11-22 04:39 Updated by: None
  • New Ticket "endless loop when command completion after ./vi kicks in" created
2020-11-22 12:31 Updated by: magicant
  • Details Updated
Comment

Thank you for the bug report.

The completion script for vi executes vi --version to see if it is Vim or not, but this may have undesired effect if the command does not exit cleanly (especially if the command does not recognize the version option). I'll consider updating the script so that it checks the version in a more safe way.

2020-11-22 13:22 Updated by: None
Comment

thanks for your reply.

The completion script for vi executes vi --version

hmm, i suspected that would happen (after reading the completion script), therefore i checked strace log but didn't see any execve, strange... hmm maybe i should've used strace -f ?

2020-11-22 14:33 Updated by: magicant
Comment

(匿名) への返信

maybe i should've used strace -f ?

yes, execve should be observed on a child process.

Attachment File List

No attachments

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login