]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
* sunrpc/xdr_mem.c (xdrmem_setpos): Don't compare addresses
authorJakub Jelinek <jakub@redhat.com>
Fri, 12 Jan 2007 15:09:57 +0000 (15:09 +0000)
committerJakub Jelinek <jakub@redhat.com>
Fri, 12 Jan 2007 15:09:57 +0000 (15:09 +0000)
as signed longs, check for x_base + pos overflow.
* sunrpc/Makefile (tests): Add tst-xdrmem2.
* sunrpc/tst-xdrmem2.c: New test.

ChangeLog
sunrpc/Makefile
sunrpc/xdr_mem.c

index 97461c2398b536c70bf602f5cf93b71fe4e87be7..3785256cd4afb01e14cc26b9e473e45a5be9f82a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-10-17  Jakub Jelinek  <jakub@redhat.com>
+
+       * sunrpc/xdr_mem.c (xdrmem_setpos): Don't compare addresses
+       as signed longs, check for x_base + pos overflow.
+       * sunrpc/Makefile (tests): Add tst-xdrmem2.
+       * sunrpc/tst-xdrmem2.c: New test.
+
 2006-10-16  Ulrich Drepper  <drepper@redhat.com>
 
        [BZ #3369]
index bc826affddb04b94bc1467a3bba5af844bd33f36..4e169c713db4bee43e41bf5fadf1630c273b6076 100644 (file)
@@ -85,7 +85,7 @@ all: # Make this the default target; it will be defined in Rules.
 
 include ../Makeconfig
 
-tests = tst-xdrmem
+tests = tst-xdrmem tst-xdrmem2
 xtests := tst-getmyaddr
 
 ifeq ($(have-thread-library),yes)
index e3167de0405bb75a3d6e312b7eda6d2f42d3752a..7b1261bbae6f68718170c799ee9848981d9d9b72 100644 (file)
@@ -177,13 +177,15 @@ xdrmem_setpos (xdrs, pos)
 {
   caddr_t newaddr = xdrs->x_base + pos;
   caddr_t lastaddr = xdrs->x_private + xdrs->x_handy;
+  size_t handy = lastaddr - newaddr;
 
-  if ((long) newaddr > (long) lastaddr
-      || (UINT_MAX < LONG_MAX
-         && (long) UINT_MAX < (long) lastaddr - (long) newaddr))
+  if (newaddr > lastaddr
+      || newaddr < xdrs->x_base
+      || handy != (u_int) handy)
     return FALSE;
+
   xdrs->x_private = newaddr;
-  xdrs->x_handy = (long) lastaddr - (long) newaddr;
+  xdrs->x_handy = (u_int) handy;
   return TRUE;
 }