changeset 29845:349517ab7398 v9.0.0261

patch 9.0.0261: bufload() reads a file even if the name is not a file name Commit: https://github.com/vim/vim/commit/2eddbacd6dc17c84e4bdc41e60e81949a36bb973 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Aug 25 12:45:21 2022 +0100 patch 9.0.0261: bufload() reads a file even if the name is not a file name Problem: bufload() reads a file even if the name is not a file name. (Cyker Way) Solution: Do not read the file when the buffer name is not a file name. (closes #10975)
author Bram Moolenaar <Bram@vim.org>
date Thu, 25 Aug 2022 14:00:06 +0200
parents c16d053bd66b
children 28b7acdab155
files runtime/doc/builtin.txt src/buffer.c src/testdir/test_functions.vim src/version.c
diffstat 4 files changed, 16 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/builtin.txt
+++ b/runtime/doc/builtin.txt
@@ -1179,7 +1179,8 @@ browsedir({title}, {initdir})
 		browsing is not possible, an empty string is returned.
 
 bufadd({name})						*bufadd()*
-		Add a buffer to the buffer list with String {name}.
+		Add a buffer to the buffer list with name {name} (must be a
+		String).
 		If a buffer for file {name} already exists, return that buffer
 		number.  Otherwise return the buffer number of the newly
 		created buffer.  When {name} is an empty string then a new
@@ -1232,7 +1233,8 @@ bufload({buf})						*bufload()*
 		Ensure the buffer {buf} is loaded.  When the buffer name
 		refers to an existing file then the file is read.  Otherwise
 		the buffer will be empty.  If the buffer was already loaded
-		then there is no change.
+		then there is no change.  If the buffer is not related to a
+		file the no file is read (e.g., when 'buftype' is "nofile").
 		If there is an existing swap file for the file of the buffer,
 		there will be no dialog, the buffer will be loaded anyway.
 		The {buf} argument is used like with |bufexists()|.
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -220,7 +220,10 @@ open_buffer(
     // mark cursor position as being invalid
     curwin->w_valid = 0;
 
+    // Read the file if there is one.
     if (curbuf->b_ffname != NULL
+	    && !bt_quickfix(curbuf)
+	    && !bt_nofilename(curbuf)
 #ifdef FEAT_NETBEANS_INTG
 	    && netbeansReadFile
 #endif
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -2368,6 +2368,13 @@ func Test_bufadd_bufload()
   exe 'bwipe ' .. buf2
   call assert_equal(0, bufexists(buf2))
 
+  " when 'buftype' is "nofile" then bufload() does not read the file
+  bwipe! XotherName
+  let buf = bufadd('XotherName')
+  call setbufvar(buf, '&bt', 'nofile')
+  call bufload(buf)
+  call assert_equal([''], getbufline(buf, 1, '$'))
+
   bwipe someName
   bwipe XotherName
   call assert_equal(0, bufexists('someName'))
--- a/src/version.c
+++ b/src/version.c
@@ -732,6 +732,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    261,
+/**/
     260,
 /**/
     259,