summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-06-06 15:59:59 +0100
committerBram Moolenaar <Bram@vim.org>2023-06-06 15:59:59 +0100
commit59f7038536a370d771758dc34036cc1424be7421 (patch)
treef964f1fa39c46c7efc63f2518c4074a6bda011d0
parentd1911a8e2b1498f0cb0275a98f63dd212204a1a8 (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.c13
-rw-r--r--src/testdir/test_spell.vim2
-rw-r--r--src/version.c2
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,