4 From: Bram Moolenaar <Bram@moolenaar.net>
6 Content-Type: text/plain; charset=UTF-8
7 Content-Transfer-Encoding: 8bit
11 Problem: Crash when executing <expr> mapping redefines that same mapping.
12 Solution: Save the values used before evaluating the expression.
16 *** ../vim-7.2.346/src/getchar.c 2009-11-11 16:23:37.000000000 +0100
17 --- src/getchar.c 2010-01-27 17:30:42.000000000 +0100
22 if (keylen >= 0 && keylen <= typebuf.tb_len)
28 + char_u *save_m_keys;
31 + # define save_m_noremap mp->m_noremap
32 + # define save_m_silent mp->m_silent
35 /* write chars to script file(s) */
36 if (keylen > typebuf.tb_maplen)
37 gotchars(typebuf.tb_buf + typebuf.tb_off
44 + /* Copy the values from *mp that are used, because
45 + * evaluating the expression may invoke a function
46 + * that redefines the mapping, thereby making *mp
48 + save_m_expr = mp->m_expr;
49 + save_m_noremap = mp->m_noremap;
50 + save_m_silent = mp->m_silent;
51 + save_m_keys = NULL; /* only saved when needed */
52 + save_m_str = NULL; /* only saved when needed */
55 * Handle ":map <expr>": evaluate the {rhs} as an
56 * expression. Save and restore the typeahead so that
59 if (tabuf.typebuf_valid)
62 ! s = eval_map_expr(mp->m_str, NUL);
63 vgetc_busy = save_vgetc_busy;
67 if (tabuf.typebuf_valid)
70 ! save_m_keys = vim_strsave(mp->m_keys);
71 ! save_m_str = vim_strsave(mp->m_str);
72 ! s = eval_map_expr(save_m_str, NUL);
73 vgetc_busy = save_vgetc_busy;
81 ! mp->m_noremap != REMAP_YES
83 ! : STRNCMP(s, mp->m_keys,
85 ? REMAP_YES : REMAP_SKIP,
86 ! 0, TRUE, cmd_silent || mp->m_silent);
99 ! save_m_noremap != REMAP_YES
103 ! save_m_keys != NULL ? save_m_keys :
107 ? REMAP_YES : REMAP_SKIP,
108 ! 0, TRUE, cmd_silent || save_m_silent);
115 + vim_free(save_m_keys);
116 + vim_free(save_m_str);
121 *** ../vim-7.2.346/src/version.c 2010-01-27 16:31:00.000000000 +0100
122 --- src/version.c 2010-01-27 17:27:32.000000000 +0100
126 { /* Add new patch number below this line */
132 hundred-and-one symptoms of being an internet addict:
133 156. You forget your friend's name but not her e-mail address.
135 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
136 /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
137 \\\ download, build and distribute -- http://www.A-A-P.org ///
138 \\\ help me help AIDS victims -- http://ICCF-Holland.org ///