vim-patch:9.0.1429: invalid memory access when ending insert mode (#22792)

Problem:    Invalid memory access when ending insert mode.
Solution:   Check if the insert_skip value is valid.

1a08a3e2a5

Co-authored-by: Bram Moolenaar <Bram@vim.org>
This commit is contained in:
zeertzjq 2023-03-27 09:37:04 +08:00 committed by GitHub
parent 2257ade3dc
commit bad218cd64
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2294,11 +2294,11 @@ static void stop_insert(pos_T *end_insert_pos, int esc, int nomove)
// Don't do it when "restart_edit" was set and nothing was inserted,
// otherwise CTRL-O w and then <Left> will clear "last_insert".
ptr = get_inserted();
if (did_restart_edit == 0 || (ptr != NULL
&& (int)strlen(ptr) > new_insert_skip)) {
int added = ptr == NULL ? 0 : (int)strlen(ptr) - new_insert_skip;
if (did_restart_edit == 0 || added > 0) {
xfree(last_insert);
last_insert = ptr;
last_insert_skip = new_insert_skip;
last_insert_skip = added < 0 ? 0 : new_insert_skip;
} else {
xfree(ptr);
}