aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/spell_defs.h6
-rw-r--r--src/nvim/spellfile.c24
2 files changed, 18 insertions, 12 deletions
diff --git a/src/nvim/spell_defs.h b/src/nvim/spell_defs.h
index ddd54c724e..e83b21b219 100644
--- a/src/nvim/spell_defs.h
+++ b/src/nvim/spell_defs.h
@@ -13,6 +13,9 @@
// Some places assume a word length fits in a
// byte, thus it can't be above 255.
+// Number of regions supported.
+#define MAXREGIONS 8
+
// Type used for indexes in the word tree need to be at least 4 bytes. If int
// is 8 bytes we could use something smaller, but what?
typedef int idx_T;
@@ -124,7 +127,8 @@ struct slang_S {
char_u *sl_info; // infotext string or NULL
- char_u sl_regions[17]; // table with up to 8 region names plus NUL
+ char_u sl_regions[MAXREGIONS * 2 + 1];
+ // table with up to 8 region names plus NUL
char_u *sl_midword; // MIDWORD string or NULL
diff --git a/src/nvim/spellfile.c b/src/nvim/spellfile.c
index 6578c7d66c..b96e8a5948 100644
--- a/src/nvim/spellfile.c
+++ b/src/nvim/spellfile.c
@@ -45,7 +45,8 @@
// website, etc)
//
// sectionID == SN_REGION: <regionname> ...
-// <regionname> 2 bytes Up to 8 region names: ca, au, etc. Lower case.
+// <regionname> 2 bytes Up to MAXREGIONS region names: ca, au, etc.
+// Lower case.
// First <regionname> is region 1.
//
// sectionID == SN_CHARFLAGS: <charflagslen> <charflags>
@@ -460,7 +461,8 @@ typedef struct spellinfo_S {
char_u *si_info; // info text chars or NULL
int si_region_count; // number of regions supported (1 when there
// are no regions)
- char_u si_region_name[17]; // region names; used only if
+ char_u si_region_name[MAXREGIONS * 2 + 1];
+ // region names; used only if
// si_region_count > 1)
garray_T si_rep; // list of fromto_T entries from REP lines
@@ -1003,7 +1005,7 @@ static char_u *read_cnt_string(FILE *fd, int cnt_bytes, int *cntp)
// Return SP_*ERROR flags.
static int read_region_section(FILE *fd, slang_T *lp, int len)
{
- if (len > 16) {
+ if (len > MAXREGIONS * 2) {
return SP_FORMERROR;
}
SPELL_READ_NONNUL_BYTES((char *)lp->sl_regions, (size_t)len, fd, ;);
@@ -3612,10 +3614,10 @@ static int spell_read_wordfile(spellinfo_T *spin, char_u *fname)
fname, lnum, line);
else {
line += 8;
- if (STRLEN(line) > 16)
+ if (STRLEN(line) > MAXREGIONS * 2) {
smsg(_("Too many regions in %s line %d: %s"),
fname, lnum, line);
- else {
+ } else {
spin->si_region_count = (int)STRLEN(line) / 2;
STRCPY(spin->si_region_name, line);
@@ -5077,7 +5079,7 @@ mkspell (
char_u *wfname;
char_u **innames;
int incount;
- afffile_T *(afile[8]);
+ afffile_T *(afile[MAXREGIONS]);
int i;
int len;
bool error = false;
@@ -5134,13 +5136,13 @@ mkspell (
spin.si_add = true;
}
- if (incount <= 0)
+ if (incount <= 0) {
EMSG(_(e_invarg)); // need at least output and input names
- else if (vim_strchr(path_tail(wfname), '_') != NULL)
+ } else if (vim_strchr(path_tail(wfname), '_') != NULL) {
EMSG(_("E751: Output file name must not have region name"));
- else if (incount > 8)
- EMSG(_("E754: Only up to 8 regions supported"));
- else {
+ } else if (incount > MAXREGIONS) {
+ EMSGN(_("E754: Only up to %ld regions supported"), MAXREGIONS);
+ } else {
// Check for overwriting before doing things that may take a lot of
// time.
if (!over_write && os_path_exists(wfname)) {