]> granicus.if.org Git - vim/commitdiff
patch 8.2.3777: spell file write error not checked v8.2.3777
author=?UTF-8?q?Bj=C3=B6rn=20Linse?= <bjorn.linse@gmail.com>
Fri, 10 Dec 2021 20:39:17 +0000 (20:39 +0000)
committerBram Moolenaar <Bram@vim.org>
Fri, 10 Dec 2021 20:39:17 +0000 (20:39 +0000)
Problem:    Spell file write error not checked.
Solution:   Check writing the prefix conditions. (Bjorn Linse, closes #9323)

src/spellfile.c
src/version.c

index 46d222d9b7da6eb9626fe6d335d3a6bd4be75609..d85432c25920d63eca17fc58e8ea01f34e612bff 100644 (file)
     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".
  */
index 03dee7ee7807ea206e163e2a4481e336e4216311..1688db9c1fe51fe5515e7c7bc4bd5a9bbfd19e7f 100644 (file)
@@ -753,6 +753,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3777,
 /**/
     3776,
 /**/