mirror of
https://github.com/neovim/neovim.git
synced 2025-09-25 20:48:32 +00:00
No OOM in vim_strsave_escape_csi()
This commit is contained in:
@@ -8295,14 +8295,12 @@ static void f_feedkeys(typval_T *argvars, typval_T *rettv)
|
||||
/* Need to escape K_SPECIAL and CSI before putting the string in the
|
||||
* typeahead buffer. */
|
||||
keys_esc = vim_strsave_escape_csi(keys);
|
||||
if (keys_esc != NULL) {
|
||||
ins_typebuf(keys_esc, (remap ? REMAP_YES : REMAP_NONE),
|
||||
typebuf.tb_len, !typed, FALSE);
|
||||
free(keys_esc);
|
||||
if (vgetc_busy)
|
||||
typebuf_was_filled = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@@ -26,6 +26,7 @@
|
||||
#include "nvim/ex_docmd.h"
|
||||
#include "nvim/ex_getln.h"
|
||||
#include "nvim/farsi.h"
|
||||
#include "nvim/func_attr.h"
|
||||
#include "nvim/main.h"
|
||||
#include "nvim/mbyte.h"
|
||||
#include "nvim/memline.h"
|
||||
@@ -3760,17 +3761,13 @@ static bool is_user_input(int k)
|
||||
/*
|
||||
* Copy "p" to allocated memory, escaping K_SPECIAL and CSI so that the result
|
||||
* can be put in the typeahead buffer.
|
||||
* Returns NULL when out of memory.
|
||||
*/
|
||||
char_u *vim_strsave_escape_csi(char_u *p)
|
||||
{
|
||||
char_u *res;
|
||||
char_u *s, *d;
|
||||
|
||||
/* Need a buffer to hold up to three times as much. */
|
||||
res = xmalloc(STRLEN(p) * 3 + 1);
|
||||
d = res;
|
||||
for (s = p; *s != NUL; ) {
|
||||
char_u *res = xmalloc(STRLEN(p) * 3 + 1);
|
||||
char_u *d = res;
|
||||
for (char_u *s = p; *s != NUL; ) {
|
||||
if (s[0] == K_SPECIAL && s[1] != NUL && s[2] != NUL) {
|
||||
/* Copy special key unmodified. */
|
||||
*d++ = *s++;
|
||||
|
@@ -986,8 +986,6 @@ do_execreg (
|
||||
return FAIL;
|
||||
}
|
||||
escaped = vim_strsave_escape_csi(y_current->y_array[i]);
|
||||
if (escaped == NULL)
|
||||
return FAIL;
|
||||
retval = ins_typebuf(escaped, remap, 0, TRUE, silent);
|
||||
free(escaped);
|
||||
if (retval == FAIL)
|
||||
|
Reference in New Issue
Block a user