diff options
author | =?UTF-8?q?Bj=C3=B6rn=20Linse?= <bjorn.linse@gmail.com> | 2021-12-10 20:39:17 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-12-10 20:39:17 +0000 |
commit | 1daedc838126bf6fe30221192cfe36aa1b56b454 (patch) | |
tree | c95c567c4f7c14f83f62f50d3b4fedf429e28ae9 | |
parent | f8e9eb8e173bf0ff9560192ae888941ef8302269 (diff) |
patch 8.2.3777: spell file write error not checkedv8.2.3777
Problem: Spell file write error not checked.
Solution: Check writing the prefix conditions. (Bjorn Linse, closes #9323)
-rw-r--r-- | src/spellfile.c | 14 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 8 insertions, 8 deletions
diff --git a/src/spellfile.c b/src/spellfile.c index 46d222d9b7..d85432c259 100644 --- a/src/spellfile.c +++ b/src/spellfile.c @@ -303,7 +303,7 @@ for ((np) = (node); (np) != NULL; (np) = (np)->wn_sibling) static int set_spell_finish(spelltab_T *new_st); -static int write_spell_prefcond(FILE *fd, garray_T *gap); +static int write_spell_prefcond(FILE *fd, garray_T *gap, size_t *fwv); static int read_region_section(FILE *fd, slang_T *slang, int len); static int read_charflags_section(FILE *fd); static int read_prefcond_section(FILE *fd, slang_T *lp); @@ -4977,10 +4977,10 @@ write_vim_spell(spellinfo_T *spin, char_u *fname) putc(SN_PREFCOND, fd); // <sectionID> putc(SNF_REQUIRED, fd); // <sectionflags> - l = write_spell_prefcond(NULL, &spin->si_prefcond); + l = write_spell_prefcond(NULL, &spin->si_prefcond, &fwv); put_bytes(fd, (long_u)l, 4); // <sectionlen> - write_spell_prefcond(fd, &spin->si_prefcond); + write_spell_prefcond(fd, &spin->si_prefcond, &fwv); } // SN_REP: <repcount> <rep> ... @@ -6567,16 +6567,15 @@ set_spell_finish(spelltab_T *new_st) /* * Write the table with prefix conditions to the .spl file. - * When "fd" is NULL only count the length of what is written. + * When "fd" is NULL only count the length of what is written and return it. */ static int -write_spell_prefcond(FILE *fd, garray_T *gap) +write_spell_prefcond(FILE *fd, garray_T *gap, size_t *fwv) { int i; char_u *p; int len; int totlen; - size_t x UNUSED = 1; // collect return value of fwrite() if (fd != NULL) put_bytes(fd, (long_u)gap->ga_len, 2); // <prefcondcnt> @@ -6593,7 +6592,7 @@ write_spell_prefcond(FILE *fd, garray_T *gap) if (fd != NULL) { fputc(len, fd); - x &= fwrite(p, (size_t)len, (size_t)1, fd); + *fwv &= fwrite(p, (size_t)len, (size_t)1, fd); } totlen += len; } @@ -6604,7 +6603,6 @@ write_spell_prefcond(FILE *fd, garray_T *gap) return totlen; } - /* * Use map string "map" for languages "lp". */ diff --git a/src/version.c b/src/version.c index 03dee7ee78..1688db9c1f 100644 --- a/src/version.c +++ b/src/version.c @@ -754,6 +754,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3777, +/**/ 3776, /**/ 3775, |