diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-06-06 15:59:59 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2023-06-06 15:59:59 +0100 |
commit | 59f7038536a370d771758dc34036cc1424be7421 (patch) | |
tree | f964f1fa39c46c7efc63f2518c4074a6bda011d0 | |
parent | d1911a8e2b1498f0cb0275a98f63dd212204a1a8 (diff) |
patch 9.0.1614: strlen() called too often for :spellrepallv9.0.1614
Problem: strlen() called too often for :spellrepall.
Solution: Store the result in a variable. (closes #12497)
-rw-r--r-- | src/spell.c | 13 | ||||
-rw-r--r-- | src/testdir/test_spell.vim | 2 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 10 insertions, 7 deletions
diff --git a/src/spell.c b/src/spell.c index db70fcf48a..ef06ab3e06 100644 --- a/src/spell.c +++ b/src/spell.c @@ -2890,7 +2890,6 @@ ex_spellrepall(exarg_T *eap UNUSED) { pos_T pos = curwin->w_cursor; char_u *frompat; - int addlen; char_u *line; char_u *p; int save_ws = p_ws; @@ -2901,9 +2900,11 @@ ex_spellrepall(exarg_T *eap UNUSED) emsg(_(e_no_previous_spell_replacement)); return; } - addlen = (int)(STRLEN(repl_to) - STRLEN(repl_from)); + size_t repl_from_len = STRLEN(repl_from); + size_t repl_to_len = STRLEN(repl_to); + int addlen = (int)(repl_to_len - repl_from_len); - frompat = alloc(STRLEN(repl_from) + 7); + frompat = alloc(repl_from_len + 7); if (frompat == NULL) return; sprintf((char *)frompat, "\\V\\<%s\\>", repl_from); @@ -2922,14 +2923,14 @@ ex_spellrepall(exarg_T *eap UNUSED) // when changing "etc" to "etc.". line = ml_get_curline(); if (addlen <= 0 || STRNCMP(line + curwin->w_cursor.col, - repl_to, STRLEN(repl_to)) != 0) + repl_to, repl_to_len) != 0) { p = alloc(STRLEN(line) + addlen + 1); if (p == NULL) break; mch_memmove(p, line, curwin->w_cursor.col); STRCPY(p + curwin->w_cursor.col, repl_to); - STRCAT(p, line + curwin->w_cursor.col + STRLEN(repl_from)); + STRCAT(p, line + curwin->w_cursor.col + repl_from_len); ml_replace(curwin->w_cursor.lnum, p, FALSE); changed_bytes(curwin->w_cursor.lnum, curwin->w_cursor.col); #if defined(FEAT_PROP_POPUP) @@ -2945,7 +2946,7 @@ ex_spellrepall(exarg_T *eap UNUSED) } ++sub_nsubs; } - curwin->w_cursor.col += (colnr_T)STRLEN(repl_to); + curwin->w_cursor.col += (colnr_T)repl_to_len; } p_ws = save_ws; diff --git a/src/testdir/test_spell.vim b/src/testdir/test_spell.vim index a42d4c7e98..3f7b028bcb 100644 --- a/src/testdir/test_spell.vim +++ b/src/testdir/test_spell.vim @@ -281,7 +281,7 @@ func Test_compl_with_CTRL_X_CTRL_K_using_spell() set spell& spelllang& dictionary& ignorecase& endfunc -func Test_spellreall() +func Test_spellrepall() new set spell call assert_fails('spellrepall', 'E752:') diff --git a/src/version.c b/src/version.c index 466209bcf8..b20685a599 100644 --- a/src/version.c +++ b/src/version.c @@ -696,6 +696,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1614, +/**/ 1613, /**/ 1612, |