Permalink
Browse files

patch 8.0.1620: reading spell file has no good EOF detection

Problem:    Reading spell file has no good EOF detection.
Solution:   Check for EOF at every character read for a length field.
  • Loading branch information...
brammool committed Mar 20, 2018
1 parent 81c3c89 commit e26e0d2b83c2875b9829b884c2ababf8ca771f7e
Showing with 38 additions and 12 deletions.
  1. +36 −12 src/misc2.c
  2. +2 −0 src/version.c
@@ -6148,59 +6148,83 @@ filewritable(char_u *fname)
#if defined(FEAT_SPELL) || defined(FEAT_PERSISTENT_UNDO) || defined(PROTO)
/*
* Read 2 bytes from "fd" and turn them into an int, MSB first.
* Returns -1 when encountering EOF.
*/
int
get2c(FILE *fd)
{
int n;
int c, n;
n = getc(fd);
n = (n << 8) + getc(fd);
return n;
if (n == EOF) return -1;
c = getc(fd);
if (c == EOF) return -1;
return (n << 8) + c;
}
/*
* Read 3 bytes from "fd" and turn them into an int, MSB first.
* Returns -1 when encountering EOF.
*/
int
get3c(FILE *fd)
{
int n;
int c, n;
n = getc(fd);
n = (n << 8) + getc(fd);
n = (n << 8) + getc(fd);
return n;
if (n == EOF) return -1;
c = getc(fd);
if (c == EOF) return -1;
n = (n << 8) + c;
c = getc(fd);
if (c == EOF) return -1;
return (n << 8) + c;
}
/*
* Read 4 bytes from "fd" and turn them into an int, MSB first.
* Returns -1 when encountering EOF.
*/
int
get4c(FILE *fd)
{
int c;
/* Use unsigned rather than int otherwise result is undefined
* when left-shift sets the MSB. */
unsigned n;
n = (unsigned)getc(fd);
n = (n << 8) + (unsigned)getc(fd);
n = (n << 8) + (unsigned)getc(fd);
n = (n << 8) + (unsigned)getc(fd);
c = getc(fd);
if (c == EOF) return -1;
n = (unsigned)c;
c = getc(fd);
if (c == EOF) return -1;
n = (n << 8) + (unsigned)c;
c = getc(fd);
if (c == EOF) return -1;
n = (n << 8) + (unsigned)c;
c = getc(fd);
if (c == EOF) return -1;
n = (n << 8) + (unsigned)c;
return (int)n;
}
/*
* Read 8 bytes from "fd" and turn them into a time_T, MSB first.
* Returns -1 when encountering EOF.
*/
time_T
get8ctime(FILE *fd)
{
int c;
time_T n = 0;
int i;
for (i = 0; i < 8; ++i)
n = (n << 8) + getc(fd);
{
c = getc(fd);
if (c == EOF) return -1;
n = (n << 8) + c;
}
return n;
}
@@ -766,6 +766,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1620,
/**/
1619,
/**/

0 comments on commit e26e0d2

Please sign in to comment.