summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author=?UTF-8?q?Bj=C3=B6rn=20Linse?= <bjorn.linse@gmail.com>2021-12-10 20:39:17 +0000
committerBram Moolenaar <Bram@vim.org>2021-12-10 20:39:17 +0000
commit1daedc838126bf6fe30221192cfe36aa1b56b454 (patch)
treec95c567c4f7c14f83f62f50d3b4fedf429e28ae9
parentf8e9eb8e173bf0ff9560192ae888941ef8302269 (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.c14
-rw-r--r--src/version.c2
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,