pgsql: Fix latent problem with pg_jrand48().
От | Tom Lane |
---|---|
Тема | pgsql: Fix latent problem with pg_jrand48(). |
Дата | |
Msg-id | E1gcxVU-0004LV-3m@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Fix latent problem with pg_jrand48(). POSIX specifies that jrand48() returns a signed 32-bit value (in the range [-2^31, 2^31)), but our code was returning an unsigned 32-bit value (in the range [0, 2^32)). This doesn't actually matter to any existing call site, because they all cast the "long" result to int32 or uint32; but it will doubtless bite somebody in the future. To fix, cast the arithmetic result to int32 explicitly before the compiler widens it to long (if widening is needed). While at it, upgrade this file's far-short-of-project-style comments. Had there been some peer pressure to document pg_jrand48() properly, maybe this thinko wouldn't have gotten committed to begin with. Backpatch to v10 where pg_jrand48() was added, just in case somebody back-patches a fix that uses it and depends on the standard behavior. Discussion: https://postgr.es/m/17235.1545951602@sss.pgh.pa.us Branch ------ REL_10_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/f256995e33d2d1074c767a0b38a2a2ed2a583161 Modified Files -------------- src/port/erand48.c | 42 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 6 deletions(-)
В списке pgsql-committers по дате отправления: