Journal insert_row as one record; keep the cursor in the buffer; fix ENABLE_ASAN
- Buffer::insert_row recorded its text and newline as two swap records after inserting both. A checkpoint triggered by the first (1 MiB of edits, or the checkpoint timer) snapshotted the newline already, and the second added it again on replay: recovery after undoing C-k C-k silently gained a blank line. It is now one record. - Visual-line yank placed the cursor relative to its row assuming that row was inside the selection; after C-k a or Enter it was not, and the cursor ended past the end of a line or the buffer, where typed text was recorded for undo at a position it was not inserted at and could not be undone. The formula uses the nearest selected row, and run_handler now clamps the cursor to the buffer before and after every command. - ENABLE_ASAN added -fsanitize=address to CMAKE_C_FLAGS only; the project is C++, so nothing was instrumented. Add it to CMAKE_CXX_FLAGS. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015rcVQiiWyTzoNrsvLSaAfB
This commit is contained in:
@@ -22,6 +22,8 @@ option(ENABLE_ASAN "Enable AddressSanitizer for builds" OFF)
|
||||
if (ENABLE_ASAN)
|
||||
message(STATUS "ASan enabled")
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
|
||||
# The project is C++; without this only C sources were instrumented.
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer")
|
||||
# Ensure the sanitizer is linked too (especially important on some platforms)
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")
|
||||
endif ()
|
||||
|
||||
Reference in New Issue
Block a user