neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit f3b38b46ebbe34f5a56ca166da9cdb27d4827724
parent aba33c72f0d00b88a81920fe04e88f1f3223d10e
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Thu, 30 Oct 2025 21:27:37 +0800

vim-patch:9.1.1292: statusline not correctly evaluated

Problem:  statusline not correctly evaluated
          (Peter Kenny, after v9.1.1291)
Solution: revert part of patch v9.1.1291
          (Hirohito Higashi)

fixes: vim/vim#17095
closes: vim/vim#17094

https://github.com/vim/vim/commit/c8ce81b0dcaddefc65e3d445c92c9e0253bd9173

Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>

Diffstat:
Msrc/nvim/statusline.c | 15+++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/nvim/statusline.c b/src/nvim/statusline.c @@ -1418,11 +1418,18 @@ int build_stl_str_hl(win_T *wp, char *out, size_t outlen, char *fmt, OptIndex op && strchr(str, '%') != NULL && evaldepth < MAX_STL_EVAL_DEPTH) { size_t parsed_usefmt = (size_t)(block_start - usefmt); - size_t new_fmt_len = parsed_usefmt + strlen(str) + strlen(fmt_p) + 3; + size_t str_length = strlen(str); + size_t fmt_length = strlen(fmt_p); + size_t new_fmt_len = parsed_usefmt + str_length + fmt_length + 3; char *new_fmt = xmalloc(new_fmt_len * sizeof(char)); - - vim_snprintf(new_fmt, new_fmt_len, "%.*s%s%s%s", - (int)parsed_usefmt, usefmt, str, "%}", fmt_p); + char *new_fmt_p = new_fmt; + + new_fmt_p = (char *)memcpy(new_fmt_p, usefmt, parsed_usefmt) + parsed_usefmt; + new_fmt_p = (char *)memcpy(new_fmt_p, str, str_length) + str_length; + new_fmt_p = (char *)memcpy(new_fmt_p, "%}", 2) + 2; + new_fmt_p = (char *)memcpy(new_fmt_p, fmt_p, fmt_length) + fmt_length; + *new_fmt_p = 0; + new_fmt_p = NULL; if (usefmt != fmt) { xfree(usefmt);