aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2025-01-02 21:17:27 +0100
committerJustin M. Keyes <justinkz@gmail.com>2025-01-03 18:02:33 +0100
commitfe87656f29e933b63f5d4dd03b3c0be3ed4ecf5f (patch)
tree61ea20eb670f66c5d3062aad39e689715d36acf3
parentb52531a9cbbd1843490333452cd124e8be070690 (diff)
downloadrneovim-fe87656f29e933b63f5d4dd03b3c0be3ed4ecf5f.tar.gz
rneovim-fe87656f29e933b63f5d4dd03b3c0be3ed4ecf5f.tar.bz2
rneovim-fe87656f29e933b63f5d4dd03b3c0be3ed4ecf5f.zip
fix(grid): grid_line_start NULL access with 'redrawdebug'
Problem: This test causes a null pointer dereference: local proc = n.spawn_wait('-l', 'test/functional/fixtures/startup-fail.lua') RUN T1565 startup -l Lua Lua-error sets Nvim exitcode: 241.00 ms OK ==================== File …/build/log/asan.13763 ==================== = …/src/nvim/grid.c:389:12: runtime error: null pointer passed as argument 1, which is declared to never be null = /usr/include/string.h:61:62: note: nonnull attribute specified here = 0 0x55cc2d869762 in grid_line_start …/src/nvim/grid.c:389:5 = 1 0x55cc2d8717ca in grid_clear …/src/nvim/grid.c:618:5 = 2 0x55cc2dbe0f6f in msg_clr_eos_force …/src/nvim/message.c:3085:3 = 3 0x55cc2dbbbdec in msg_clr_eos …/src/nvim/message.c:3061:5 = 4 0x55cc2dbbae2c in msg_multiline …/src/nvim/message.c:281:9 = 5 0x55cc2dbba2b4 in msg_keep …/src/nvim/message.c:364:5 = 6 0x55cc2dbc4992 in emsg_multiline …/src/nvim/message.c:773:10 = 7 0x55cc2dbc5d43 in semsg_multiline …/src/nvim/message.c:824:9 = 8 0x55cc2d9c5945 in nlua_error …/src/nvim/lua/executor.c:158:5 = 9 0x55cc2d9c89fd in nlua_exec_file …/src/nvim/lua/executor.c:1862:5 = 10 0x55cc2d9f4d69 in main …/src/nvim/main.c:637:19 = 11 0x7f319b62a1c9 in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16 = 12 0x7f319b62a28a in __libc_start_main csu/../csu/libc-start.c:360:3 = 13 0x55cc2ced0f64 in _start (…/build/bin/nvim+0xc48f64) (BuildId: 309c83f8d74297c89719dae9c271dd8ec23e64c3) Cause: The tests use `redrawdebug=invalid` by default, but `default_grid_alloc` skips calling `grid_alloc` when not `full_screen`. Solution: Check for `full_screen`.
-rw-r--r--src/nvim/grid.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/nvim/grid.c b/src/nvim/grid.c
index e863cb3476..df93ad1655 100644
--- a/src/nvim/grid.c
+++ b/src/nvim/grid.c
@@ -383,7 +383,8 @@ void grid_line_start(ScreenGrid *grid, int row)
assert((size_t)grid_line_maxcol <= linebuf_size);
- if (rdb_flags & kOptRdbFlagInvalid) {
+ if (full_screen && (rdb_flags & kOptRdbFlagInvalid)) {
+ assert(linebuf_char);
// Current batch must not depend on previous contents of linebuf_char.
// Set invalid values which will cause assertion failures later if they are used.
memset(linebuf_char, 0xFF, sizeof(schar_T) * linebuf_size);