diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2018-08-10 20:08:18 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-08-10 20:08:18 +0200 |
commit | c30812be7bff56d3a18a879240d47491c5934164 (patch) | |
tree | 334bec7ac427c744465124f355af8cfd577efc7a | |
parent | a5e3f4da349e29a5097798d52ecc6655b0d41907 (diff) | |
parent | 5ee9161f81340632892ea7e2959b600f41258552 (diff) | |
download | rneovim-c30812be7bff56d3a18a879240d47491c5934164.tar.gz rneovim-c30812be7bff56d3a18a879240d47491c5934164.tar.bz2 rneovim-c30812be7bff56d3a18a879240d47491c5934164.zip |
Merge #8845 from janlazo/vim-8.0.1490
-rw-r--r-- | src/nvim/spell_defs.h | 6 | ||||
-rw-r--r-- | src/nvim/spellfile.c | 24 |
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)) { |