aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-04-29 18:09:25 +0800
committerGitHub <noreply@github.com>2022-04-29 18:09:25 +0800
commit8c548c9e5416b4e25b51c018ceaa433756ee99b1 (patch)
treecb6cf2164c8ea900d188c6499c34ff6ab5d75a2c /src
parent35a7b0f9b991e884eae81aa7393f9701b7b7b85e (diff)
parentc8e45366b9d0914eb17f759e0bfa7829fd419857 (diff)
downloadrneovim-8c548c9e5416b4e25b51c018ceaa433756ee99b1.tar.gz
rneovim-8c548c9e5416b4e25b51c018ceaa433756ee99b1.tar.bz2
rneovim-8c548c9e5416b4e25b51c018ceaa433756ee99b1.zip
Merge pull request #18301 from zeertzjq/fix-lua-unmap-crash
fix(mappings): fix double-free when unmapping simplifiable Lua mapping
Diffstat (limited to 'src')
-rw-r--r--src/nvim/getchar.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c
index 58daa9631a..eb78317ee7 100644
--- a/src/nvim/getchar.c
+++ b/src/nvim/getchar.c
@@ -3299,7 +3299,9 @@ int buf_do_map(int maptype, MapArguments *args, int mode, bool is_abbrev, buf_T
XFREE_CLEAR(mp->m_str);
XFREE_CLEAR(mp->m_orig_str);
XFREE_CLEAR(mp->m_desc);
- NLUA_CLEAR_REF(mp->m_luaref);
+ if (!mp->m_simplified) {
+ NLUA_CLEAR_REF(mp->m_luaref);
+ }
mp->m_str = vim_strsave(rhs);
mp->m_orig_str = vim_strsave(orig_rhs);
@@ -3500,7 +3502,9 @@ static void mapblock_free(mapblock_T **mpp)
mp = *mpp;
xfree(mp->m_keys);
- NLUA_CLEAR_REF(mp->m_luaref);
+ if (!mp->m_simplified) {
+ NLUA_CLEAR_REF(mp->m_luaref);
+ }
XFREE_CLEAR(mp->m_str);
XFREE_CLEAR(mp->m_orig_str);
XFREE_CLEAR(mp->m_desc);