summaryrefslogtreecommitdiffstats
path: root/lib/libc/stdio/refill.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/stdio/refill.c')
-rw-r--r--lib/libc/stdio/refill.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/libc/stdio/refill.c b/lib/libc/stdio/refill.c
index fa46d78..2d30e81 100644
--- a/lib/libc/stdio/refill.c
+++ b/lib/libc/stdio/refill.c
@@ -44,6 +44,7 @@ static const char rcsid[] =
#include "namespace.h"
#include <errno.h>
+#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include "un-namespace.h"
@@ -141,10 +142,18 @@ __srefill(FILE *fp)
if (fp->_r == 0)
fp->_flags |= __SEOF;
else {
+ err:
fp->_r = 0;
fp->_flags |= __SERR;
+ fp->_flags &= ~__SOFF;
}
return (EOF);
+ } else if (fp->_flags & __SOFF) {
+ if (fp->_offset > OFF_MAX - fp->_r) {
+ errno = EOVERFLOW;
+ goto err;
+ } else
+ fp->_offset += fp->_r;
}
return (0);
}
OpenPOWER on IntegriCloud