Bug 3747

Summary: mrand48 and it's friends return values outside of [-2^31, 2^31] on 64-bit platforms
Product: glibc Reporter: Nicholas Miell <nmiell>
Component: libcAssignee: Ulrich Drepper <drepper.fsp>
Status: RESOLVED FIXED    
Severity: normal CC: glibc-bugs
Priority: P2 Flags: fweimer: security-
Version: unspecified   
Target Milestone: ---   
Host: Target:
Build: Last reconfirmed:

Description Nicholas Miell 2006-12-18 00:57:04 UTC
A simple test program which aborts immediately:

#include <stdlib.h>
#include <limits.h>

int main(void)
{
     while(1) {
	  long x = mrand48();
	  if (x > 2147483648 || x < -2147483648)
	       abort();
     }
}
Comment 1 segher@kernel.crashing.org 2006-12-18 09:37:31 UTC
Subject: Re:  New: mrand48 and it's friends return values outside of [-2^31, 2^31] on 64-bit platforms

> 	  if (x > 2147483648

Invalid testcase; this number is negative with default GCC -std flag.


Segher

Comment 2 Nicholas Miell 2006-12-19 02:32:13 UTC
Since you're too lazy to do the obvious:

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
     while(1) {
          long x = mrand48();
          if (x > 2147483648L || x < -2147483648L) {
               printf("long: %ld, int: %d\n", x, (int) x);
               abort();
          }
     }
}
Comment 3 Ulrich Drepper 2006-12-19 08:18:46 UTC
Fixed in cvs.
Comment 4 Sourceware Commits 2007-01-12 17:52:17 UTC
Subject: Bug 3747

CVSROOT:	/cvs/glibc
Module name:	libc
Branch: 	glibc-2_5-branch
Changes by:	jakub@sourceware.org	2007-01-12 17:52:07

Modified files:
	.              : ChangeLog 
	stdlib         : Makefile jrand48_r.c tst-rand48.c 
Added files:
	stdlib         : tst-rand48-2.c 

Log message:
	[BZ #3747]
	* stdlib/jrand48_r.c (__jrand48_r): Make sure result is in the
	[-231 .. 231) range.
	* stdlib/tst-rand48.c (main): Fix expected values for 64-bit
	targets.
	* stdlib/tst-rand48-2.c: New test.
	* stdlib/Makefile (tests): Add tst-rand48-2.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/libc/ChangeLog.diff?cvsroot=glibc&only_with_tag=glibc-2_5-branch&r1=1.10362.2.23&r2=1.10362.2.24
http://sourceware.org/cgi-bin/cvsweb.cgi/libc/stdlib/tst-rand48-2.c.diff?cvsroot=glibc&only_with_tag=glibc-2_5-branch&r1=NONE&r2=1.1.4.1
http://sourceware.org/cgi-bin/cvsweb.cgi/libc/stdlib/Makefile.diff?cvsroot=glibc&only_with_tag=glibc-2_5-branch&r1=1.109&r2=1.109.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/libc/stdlib/jrand48_r.c.diff?cvsroot=glibc&only_with_tag=glibc-2_5-branch&r1=1.9&r2=1.9.10.1
http://sourceware.org/cgi-bin/cvsweb.cgi/libc/stdlib/tst-rand48.c.diff?cvsroot=glibc&only_with_tag=glibc-2_5-branch&r1=1.1&r2=1.1.10.1