This is the mail archive of the
glibc-bugs@sourceware.org
mailing list for the glibc project.
[Bug stdio/19165] fread overflow
- From: "ppluzhnikov at google dot com" <sourceware-bugzilla at sourceware dot org>
- To: glibc-bugs at sourceware dot org
- Date: Mon, 26 Oct 2015 02:40:15 +0000
- Subject: [Bug stdio/19165] fread overflow
- Auto-submitted: auto-generated
- References: <bug-19165-131 at http dot sourceware dot org/bugzilla/>
https://sourceware.org/bugzilla/show_bug.cgi?id=19165
Paul Pluzhnikov <ppluzhnikov at google dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |ppluzhnikov at google dot com
--- Comment #5 from Paul Pluzhnikov <ppluzhnikov at google dot com> ---
The following patch seems like it's both more efficient *and* provides correct
answer:
diff --git a/libio/iofread.c b/libio/iofread.c
index eb69b05..a8ea391 100644
--- a/libio/iofread.c
+++ b/libio/iofread.c
@@ -37,7 +37,7 @@ _IO_fread (void *buf, _IO_size_t size, _IO_size_t count,
_IO_FILE *fp)
_IO_acquire_lock (fp);
bytes_read = _IO_sgetn (fp, (char *) buf, bytes_requested);
_IO_release_lock (fp);
- return bytes_requested == bytes_read ? count : bytes_read / size;
+ return bytes_read / size;
}
libc_hidden_def (_IO_fread)
diff --git a/libio/iofread_u.c b/libio/iofread_u.c
index 997b714..28651bf 100644
--- a/libio/iofread_u.c
+++ b/libio/iofread_u.c
@@ -38,7 +38,7 @@ __fread_unlocked (void *buf, _IO_size_t size, _IO_size_t
count, _IO_FILE *fp)
if (bytes_requested == 0)
return 0;
bytes_read = _IO_sgetn (fp, (char *) buf, bytes_requested);
- return bytes_requested == bytes_read ? count : bytes_read / size;
+ return bytes_read / size;
}
libc_hidden_def (__fread_unlocked)
weak_alias (__fread_unlocked, fread_unlocked)
The fwrite case is slightly more complicated by EOF being an indication that
"all bytes were written".
I'll mail a patch to libc-alpha...
--
You are receiving this mail because:
You are on the CC list for the bug.