From: Jakub Jelinek Date: Fri, 12 Jan 2007 15:09:57 +0000 (+0000) Subject: * sunrpc/xdr_mem.c (xdrmem_setpos): Don't compare addresses X-Git-Tag: cvs/fedora-glibc-2_5-20070712T1701~105 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9ea3b0192f4f5bf36715957ab919bffbb24e9710;p=thirdparty%2Fglibc.git * 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. --- diff --git a/ChangeLog b/ChangeLog index 97461c2398b..3785256cd4a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2006-10-17 Jakub Jelinek + + * 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 [BZ #3369] diff --git a/sunrpc/Makefile b/sunrpc/Makefile index bc826affddb..4e169c713db 100644 --- a/sunrpc/Makefile +++ b/sunrpc/Makefile @@ -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) diff --git a/sunrpc/xdr_mem.c b/sunrpc/xdr_mem.c index e3167de0405..7b1261bbae6 100644 --- a/sunrpc/xdr_mem.c +++ b/sunrpc/xdr_mem.c @@ -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; }