From: glepnir Date: Thu, 11 Dec 2025 19:45:09 +0000 (+0100) Subject: patch 9.1.1971: Crash when buffer gets deleted inside charconvert during save X-Git-Tag: v9.1.1971^0 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fe1c57cd2caa7de2ce23557646d6c62a9a1b4f92;p=thirdparty%2Fvim.git patch 9.1.1971: Crash when buffer gets deleted inside charconvert during save Problem: Crash when buffer gets deleted inside charconvert during save Solution: Check for `b_saving` inside `can_unload_buffer()`, so we don’t try to unload a buffer while it’s still being saved (glepnir). closes: #18901 Signed-off-by: glepnir Signed-off-by: Christian Brabandt --- diff --git a/src/buffer.c b/src/buffer.c index 90104cf0db..0ed61a7032 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -516,6 +516,10 @@ can_unload_buffer(buf_T *buf) break; } } + // Don't unload the buffer while it's still being saved + if (can_unload && buf->b_saving) + can_unload = FALSE; + if (!can_unload) { char_u *fname = buf->b_fname != NULL ? buf->b_fname : buf->b_ffname; diff --git a/src/testdir/test_buffer.vim b/src/testdir/test_buffer.vim index 1ffa7ae879..d688a8671e 100644 --- a/src/testdir/test_buffer.vim +++ b/src/testdir/test_buffer.vim @@ -226,6 +226,13 @@ func Test_buffer_error() %bwipe endfunc +func Test_bwipe_during_save() + set charconvert=execute('%bw!') + call assert_fails('write ++enc=lmao boom', 'E937:') + + %bwipe +endfunc + " Test for the status messages displayed when unloading, deleting or wiping " out buffers func Test_buffer_statusmsg() diff --git a/src/version.c b/src/version.c index 2e806c33c1..922242d911 100644 --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1971, /**/ 1970, /**/