aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2024-07-31 06:21:55 +0800
committerGitHub <noreply@github.com>2024-07-31 06:21:55 +0800
commit63cd2adf3d27436dbaf6a8eda72608d3009ccd3c (patch)
treeb5c3d8d7a6066d662703cc0e9df0dfc1063fe4e9 /src
parent617810d72d78ce7e1f5e6b6e71ccb6bb5960904d (diff)
downloadrneovim-63cd2adf3d27436dbaf6a8eda72608d3009ccd3c.tar.gz
rneovim-63cd2adf3d27436dbaf6a8eda72608d3009ccd3c.tar.bz2
rneovim-63cd2adf3d27436dbaf6a8eda72608d3009ccd3c.zip
vim-patch:9.1.0644: Unnecessary STRLEN() when applying mapping (#29921)
Problem: Unnecessary STRLEN() when applying mapping. (after v9.1.0642) Solution: Use m_keylen and vim_strnsave(). (zeertzjq) closes: vim/vim#15394 https://github.com/vim/vim/commit/74011dc1fa7bca6c901937173a42e0edce68e080
Diffstat (limited to 'src')
-rw-r--r--src/nvim/getchar.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c
index 5c8b3ebe46..7b388e6061 100644
--- a/src/nvim/getchar.c
+++ b/src/nvim/getchar.c
@@ -2335,6 +2335,7 @@ static int handle_mapping(int *keylenp, const bool *timedout, int *mapdepth)
const bool save_m_silent = mp->m_silent;
char *save_m_keys = NULL; // only saved when needed
char *save_alt_m_keys = NULL; // only saved when needed
+ const int save_alt_m_keylen = mp->m_alt != NULL ? mp->m_alt->m_keylen : 0;
// Handle ":map <expr>": evaluate the {rhs} as an
// expression. Also save and restore the command line
@@ -2347,8 +2348,10 @@ static int handle_mapping(int *keylenp, const bool *timedout, int *mapdepth)
vgetc_busy = 0;
may_garbage_collect = false;
- save_m_keys = xstrdup(mp->m_keys);
- save_alt_m_keys = mp->m_alt != NULL ? xstrdup(mp->m_alt->m_keys) : NULL;
+ save_m_keys = xmemdupz(mp->m_keys, (size_t)mp->m_keylen);
+ save_alt_m_keys = mp->m_alt != NULL
+ ? xmemdupz(mp->m_alt->m_keys, (size_t)save_alt_m_keylen)
+ : NULL;
map_str = eval_map_expr(mp, NUL);
if ((map_str == NULL || *map_str == NUL)) {
@@ -2401,11 +2404,11 @@ static int handle_mapping(int *keylenp, const bool *timedout, int *mapdepth)
? strncmp(map_str, save_m_keys, (size_t)keylen) == 0
|| (save_alt_m_keys != NULL
&& strncmp(map_str, save_alt_m_keys,
- strlen(save_alt_m_keys)) == 0)
+ (size_t)save_alt_m_keylen) == 0)
: strncmp(map_str, mp->m_keys, (size_t)keylen) == 0
|| (mp->m_alt != NULL
&& strncmp(map_str, mp->m_alt->m_keys,
- strlen(mp->m_alt->m_keys)) == 0)) {
+ (size_t)mp->m_alt->m_keylen) == 0)) {
noremap = REMAP_SKIP;
} else {
noremap = REMAP_YES;