as signed longs, check for x_base + pos overflow.
* sunrpc/Makefile (tests): Add tst-xdrmem2.
* sunrpc/tst-xdrmem2.c: New test.
+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]
include ../Makeconfig
-tests = tst-xdrmem
+tests = tst-xdrmem tst-xdrmem2
xtests := tst-getmyaddr
ifeq ($(have-thread-library),yes)
{
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;
}