summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorache <ache@FreeBSD.org>2015-11-01 06:47:05 +0000
committerache <ache@FreeBSD.org>2015-11-01 06:47:05 +0000
commit135d0338a00f20a5f81fbfe0a5ca1d01feeed8d1 (patch)
treef9a4523623049c1c770ff87267b5111ba169cb7c /lib
parent1b3f07327ec124b695514a80cb008185e30bcbe0 (diff)
downloadFreeBSD-src-135d0338a00f20a5f81fbfe0a5ca1d01feeed8d1.zip
FreeBSD-src-135d0338a00f20a5f81fbfe0a5ca1d01feeed8d1.tar.gz
Addition to prev. commit.
In some edge cases fp->_p can be changed in _sseek(), recalculate. PR: 204156 MFC after: 1 week
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/stdio/ftell.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/lib/libc/stdio/ftell.c b/lib/libc/stdio/ftell.c
index 8cf94ee..61ebee9 100644
--- a/lib/libc/stdio/ftell.c
+++ b/lib/libc/stdio/ftell.c
@@ -125,10 +125,6 @@ _ftello(FILE *fp, fpos_t *offset)
* underlying object.
*/
n = fp->_p - fp->_bf._base;
- if (pos > OFF_MAX - n) {
- errno = EOVERFLOW;
- return (1);
- }
if (n > 0 &&
((fp->_flags & __SAPP) || (fp->_flags2 & __S2OAP))) {
int serrno = errno;
@@ -147,6 +143,12 @@ _ftello(FILE *fp, fpos_t *offset)
}
}
errno = serrno;
+ /* fp->_p can be changed in _sseek(), recalculate. */
+ n = fp->_p - fp->_bf._base;
+ }
+ if (pos > OFF_MAX - n) {
+ errno = EOVERFLOW;
+ return (1);
}
pos += n;
}
OpenPOWER on IntegriCloud