mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 04:17:01 +00:00 
			
		
		
		
	fix(api): handle NUL in nvim_err_write() and nvim_out_write() (#25354)
This commit is contained in:
		| @@ -1709,6 +1709,8 @@ static void write_msg(String message, bool to_err, bool writeln) | ||||
|     msg_didout = true; \ | ||||
|     kv_drop(line_buf, kv_size(line_buf)); \ | ||||
|     kv_resize(line_buf, LINE_BUFFER_MIN_SIZE); \ | ||||
|   } else if (c == NUL) { \ | ||||
|     kv_push(line_buf, NL); \ | ||||
|   } else { \ | ||||
|     kv_push(line_buf, c); \ | ||||
|   } | ||||
|   | ||||
| @@ -2053,6 +2053,19 @@ describe('API', function() | ||||
|   end) | ||||
|  | ||||
|   describe('nvim_out_write', function() | ||||
|     local screen | ||||
|  | ||||
|     before_each(function() | ||||
|       screen = Screen.new(40, 8) | ||||
|       screen:attach() | ||||
|       screen:set_default_attr_ids({ | ||||
|         [0] = {bold = true, foreground = Screen.colors.Blue}, | ||||
|         [1] = {bold = true, foreground = Screen.colors.SeaGreen}, | ||||
|         [2] = {bold = true, reverse = true}, | ||||
|         [3] = {foreground = Screen.colors.Blue}, | ||||
|       }) | ||||
|     end) | ||||
|  | ||||
|     it('prints long messages correctly #20534', function() | ||||
|       exec([[ | ||||
|         set more | ||||
| @@ -2073,14 +2086,7 @@ describe('API', function() | ||||
|       eq('\naaa\n' .. ('a'):rep(5002) .. '\naaa', meths.get_var('out')) | ||||
|     end) | ||||
|  | ||||
|     it('blank line in message works', function() | ||||
|       local screen = Screen.new(40, 8) | ||||
|       screen:attach() | ||||
|       screen:set_default_attr_ids({ | ||||
|         [0] = {bold = true, foreground = Screen.colors.Blue}, | ||||
|         [1] = {bold = true, foreground = Screen.colors.SeaGreen}, | ||||
|         [2] = {bold = true, reverse = true}, | ||||
|       }) | ||||
|     it('blank line in message', function() | ||||
|       feed([[:call nvim_out_write("\na\n")<CR>]]) | ||||
|       screen:expect{grid=[[ | ||||
|                                                 | | ||||
| @@ -2105,6 +2111,20 @@ describe('API', function() | ||||
|         {1:Press ENTER or type command to continue}^ | | ||||
|       ]]} | ||||
|     end) | ||||
|  | ||||
|     it('NUL bytes in message', function() | ||||
|       feed([[:lua vim.api.nvim_out_write('aaa\0bbb\0\0ccc\nddd\0\0\0eee\n')<CR>]]) | ||||
|       screen:expect{grid=[[ | ||||
|                                                 | | ||||
|         {0:~                                       }| | ||||
|         {0:~                                       }| | ||||
|         {0:~                                       }| | ||||
|         {2:                                        }| | ||||
|         aaa{3:^@}bbb{3:^@^@}ccc                         | | ||||
|         ddd{3:^@^@^@}eee                            | | ||||
|         {1:Press ENTER or type command to continue}^ | | ||||
|       ]]} | ||||
|     end) | ||||
|   end) | ||||
|  | ||||
|   describe('nvim_err_write', function() | ||||
| @@ -2193,6 +2213,20 @@ describe('API', function() | ||||
|       ]]) | ||||
|       feed('<cr>')  -- exit the press ENTER screen | ||||
|     end) | ||||
|  | ||||
|     it('NUL bytes in message', function() | ||||
|       nvim_async('err_write', 'aaa\0bbb\0\0ccc\nddd\0\0\0eee\n') | ||||
|       screen:expect{grid=[[ | ||||
|                                                 | | ||||
|         {0:~                                       }| | ||||
|         {0:~                                       }| | ||||
|         {0:~                                       }| | ||||
|         {3:                                        }| | ||||
|         {1:aaa^@bbb^@^@ccc}                         | | ||||
|         {1:ddd^@^@^@eee}                            | | ||||
|         {2:Press ENTER or type command to continue}^ | | ||||
|       ]]} | ||||
|     end) | ||||
|   end) | ||||
|  | ||||
|   describe('nvim_err_writeln', function() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 zeertzjq
					zeertzjq