aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-05-13 17:39:36 +0000
committerUlrich Drepper <drepper@redhat.com>2004-05-13 17:39:36 +0000
commitf7803f5170fb98c3ed464da05412af5964f087b2 (patch)
treecdd852cf0e7f91d15994bdbc92546f7fdaaa8d5b
parent7f4311e8bf2aeb646afabe37ba9d78441e548bc4 (diff)
downloadglibc-f7803f5170fb98c3ed464da05412af5964f087b2.tar
glibc-f7803f5170fb98c3ed464da05412af5964f087b2.tar.gz
glibc-f7803f5170fb98c3ed464da05412af5964f087b2.tar.bz2
glibc-f7803f5170fb98c3ed464da05412af5964f087b2.zip
Update.
2004-05-13 Jakub Jelinek <jakub@redhat.com> * libio/genops.c (_IO_default_xsputn): Avoid one overflow per char if count is negative, yet write_ptr < write_end. (_IO_default_xsgetn): Avoid one underflow per char if count is negative, yet read_ptr < read_end.
-rw-r--r--ChangeLog7
-rw-r--r--libio/genops.c20
2 files changed, 15 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 6dcada2f70..5889b2165e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2004-05-13 Jakub Jelinek <jakub@redhat.com>
+
+ * libio/genops.c (_IO_default_xsputn): Avoid one overflow per char if
+ count is negative, yet write_ptr < write_end.
+ (_IO_default_xsgetn): Avoid one underflow per char if count is
+ negative, yet read_ptr < read_end.
+
2004-05-12 Steven Munroe <sjmunroe@us.ibm.com>
* sysdeps/unix/sysv/linux/powerpc/bits/termios.h (XTABS): Define XTABS
diff --git a/libio/genops.c b/libio/genops.c
index 5b65e76bea..f233f36d8b 100644
--- a/libio/genops.c
+++ b/libio/genops.c
@@ -447,10 +447,10 @@ _IO_default_xsputn (f, data, n)
for (;;)
{
/* Space available. */
- _IO_ssize_t count = f->_IO_write_end - f->_IO_write_ptr;
- if (count > 0)
+ if (f->_IO_write_ptr < f->_IO_write_end)
{
- if ((_IO_size_t) count > more)
+ _IO_size_t count = f->_IO_write_end - f->_IO_write_ptr;
+ if (count > more)
count = more;
if (count > 20)
{
@@ -462,9 +462,7 @@ _IO_default_xsputn (f, data, n)
#endif
s += count;
}
- else if (count <= 0)
- count = 0;
- else
+ else if (count)
{
char *p = f->_IO_write_ptr;
_IO_ssize_t i;
@@ -504,10 +502,10 @@ _IO_default_xsgetn (fp, data, n)
for (;;)
{
/* Data available. */
- _IO_ssize_t count = fp->_IO_read_end - fp->_IO_read_ptr;
- if (count > 0)
+ if (fp->_IO_read_ptr < fp->_IO_read_end)
{
- if ((_IO_size_t) count > more)
+ _IO_size_t count = fp->_IO_read_end - fp->_IO_read_ptr;
+ if (count > more)
count = more;
if (count > 20)
{
@@ -519,9 +517,7 @@ _IO_default_xsgetn (fp, data, n)
#endif
fp->_IO_read_ptr += count;
}
- else if (count <= 0)
- count = 0;
- else
+ else if (count)
{
char *p = fp->_IO_read_ptr;
int i = (int) count;