mailing list of musl libc
 help / color / mirror / code / Atom feed
* jrand48(): missing cast to int32_t?
@ 2016-12-09  6:16 Ed Schouten
  2016-12-09 17:05 ` Szabolcs Nagy
  0 siblings, 1 reply; 2+ messages in thread
From: Ed Schouten @ 2016-12-09  6:16 UTC (permalink / raw)
  To: musl

Hi there,

According to POSIX, jrand48() is supposed to return a value between
[-2^31, 2^31). Musl's version of jrand48() is implemented as follows:

long jrand48(unsigned short s[3])
{
        return __rand48_step(s, __seed48+3) >> 16;
}

Notice that the function only uses simple bit shifting and its return
type is long, meaning that on 64-bit systems, this implementation may
actually return a value between [0, 2^32).

For some reason, FreeBSD had the same bug. By adding a cast to
int32_t, its implementation now returns the same sequence of
pseudo-random numbers as macOS, Solaris, glibc, etc.

https://svnweb.freebsd.org/base?view=revision&revision=309650

Musl's version should likely be changed to this:

long jrand48(unsigned short s[3])
{
        return (int32_t)(__rand48_step(s, __seed48+3) >> 16);
}

Best regards,
-- 
Ed Schouten <ed@nuxi.nl>
Nuxi, 's-Hertogenbosch, the Netherlands
KvK-nr.: 62051717


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-12-09 17:05 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-12-09  6:16 jrand48(): missing cast to int32_t? Ed Schouten
2016-12-09 17:05 ` Szabolcs Nagy

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).