2
0
mirror of git://sourceware.org/git/glibc.git synced 2025-04-24 14:41:06 +08:00

* 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.
This commit is contained in:
Jakub Jelinek 2007-01-12 15:09:57 +00:00
parent 9b004c59dd
commit 9ea3b0192f
3 changed files with 14 additions and 5 deletions

@ -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]

@ -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)

@ -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;
}