From 431c037709d1e0e44a97b9eaa51afdc8354b492c Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Sun, 30 Mar 2025 21:41:05 +0800 Subject: vim-patch:9.1.1260: Hang when filtering buffer with NUL bytes (#33192) Problem: Hang when filtering buffer with NUL bytes (after 9.1.1050). Solution: Don't subtract "written" from "lplen" repeatedly (zeertzjq). related: neovim/neovim#33173 closes: vim/vim#17011 https://github.com/vim/vim/commit/53fed23cb7bd59d9400961b44c6c8dca0029c929 --- src/nvim/os/shell.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/nvim/os/shell.c b/src/nvim/os/shell.c index d60d0b3e55..e711611d67 100644 --- a/src/nvim/os/shell.c +++ b/src/nvim/os/shell.c @@ -1211,7 +1211,6 @@ static void read_input(StringBuilder *buf) size_t lplen = (size_t)ml_get_len(lnum); while (true) { - lplen -= written; if (lplen == 0) { len = 0; } else if (lp[written] == NL) { @@ -1220,11 +1219,11 @@ static void read_input(StringBuilder *buf) kv_push(*buf, NUL); } else { char *s = vim_strchr(lp + written, NL); - len = s == NULL ? lplen : (size_t)(s - (lp + written)); + len = s == NULL ? lplen - written : (size_t)(s - (lp + written)); kv_concat_len(*buf, lp + written, len); } - if (len == lplen) { + if (len == lplen - written) { // Finished a line, add a NL, unless this line should not have one. if (lnum != curbuf->b_op_end.lnum || (!curbuf->b_p_bin && curbuf->b_p_fixeol) -- cgit