Mercurial > vim
changeset 29902:ab2d83e147ca v9.0.0289
patch 9.0.0289: invalid memory write
Commit: https://github.com/vim/vim/commit/beedd0a266cfe524fe2a851caec8316f2e37885c
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Aug 27 21:52:52 2022 +0100
patch 9.0.0289: invalid memory write
Problem: Invalid memory write.
Solution: Do not put NUL in a static string.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 27 Aug 2022 23:00:02 +0200 |
parents | 5387c6c0d6c8 |
children | 08cbdf656975 |
files | src/message.c src/version.c |
diffstat | 2 files changed, 27 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/message.c +++ b/src/message.c @@ -2237,20 +2237,41 @@ msg_puts_attr_len(char *str, int maxlen, static void put_msg_win(win_T *wp, int where, char_u *t_s, char_u *end, linenr_T lnum) { - int c = *end; - - *end = NUL; + char_u *p; + if (where == PUT_BELOW) - ml_append_buf(wp->w_buffer, lnum, t_s, (colnr_T)0, FALSE); + { + if (*end != NUL) + { + p = vim_strnsave(t_s, end - t_s); + if (p == NULL) + return; + } + else + p = t_s; + ml_append_buf(wp->w_buffer, lnum, p, (colnr_T)0, FALSE); + if (p != t_s) + vim_free(p); + } else { char_u *newp; curbuf = wp->w_buffer; if (where == PUT_APPEND) + { newp = concat_str(ml_get(lnum), t_s); + if (newp == NULL) + return; + if (*end != NUL) + newp[STRLEN(ml_get(lnum)) + (end - t_s)] = NUL; + } else + { newp = vim_strnsave(t_s, end - t_s); + if (newp == NULL) + return; + } ml_replace(lnum, newp, FALSE); curbuf = curwin->w_buffer; } @@ -2258,8 +2279,6 @@ put_msg_win(win_T *wp, int where, char_u // set msg_col so that a newline is written if needed msg_col = STRLEN(t_s); - - *end = c; } #endif