diff options
| author | Justin M. Keyes <justinkz@gmail.com> | 2026-10-03 12:45:57 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-10-03 12:45:57 -0400 |
| commit | e77fa0a97266b3a31e470d3d5c6036f245e3a5e8 (patch) | |
| tree | 1e5b10c1634ccc64adc5c8f1d3a3dc25961e7f3e /runtime/lua/vim/_ftplugin/lua.lua | |
| parent | 585ffe06a9ce92113388d1e8372ba1db8c0422cb (diff) | |
| download | rneovim-e77fa0a97266b3a31e470d3d5c6036f245e3a5e8.tar.gz rneovim-e77fa0a97266b3a31e470d3d5c6036f245e3a5e8.tar.bz2 rneovim-e77fa0a97266b3a31e470d3d5c6036f245e3a5e8.zip | |
fix(rpc): redraw parse failure silently closes channel #42220
Problem:
When `unpacker_parse_redraw()` fails, it closes the unpacker without
setting `unpack_error`, so `chan_close_on_err()` gets a NULL message.
A pending request fails with an empty error (`RPC: (null)`).
c04d0734a728 fixed the crash that followed (advancing the closed
unpacker), but not the silent close itself.
Repro:
Self-attach (`nvim_ui_attach` on a loopback `sockconnect()` channel)
closes the channel without a visible reason, either while
`nvim_ui_attach` is pending or at the next redraw.
Solution:
Set an error msg when `unpacker_parse_redraw()` fails.
Note:
Self-attach fails for accidental reasons, not by design:
- An incoming "redraw" notif is always parsed "as a UI client"
(`handle_ui_client_redraw`), whose `grid_line` buffer is only
allocated in a UI client process. A loopback channel is both ends, so
it parses its own redraw stream as if it were the TUI.
- Even if parsing worked, `parse_msgpack()` drops redraw events unless
`ui_client_attached`, and a `sockconnect()` client has no notification
callback.
Diffstat (limited to 'runtime/lua/vim/_ftplugin/lua.lua')
0 files changed, 0 insertions, 0 deletions