sampling.c and potential divisions by 0 ang log(0) with tablesample and ANALYZE in 9.5 - Mailing list pgsql-bugs

From Michael Paquier
Subject sampling.c and potential divisions by 0 ang log(0) with tablesample and ANALYZE in 9.5
Date
Msg-id CAB7nPqTL0YYPgGt00gV8mw+23U4ki8yXUKV0mfji3YVpAqR8sA@mail.gmail.com
Whole thread Raw
Responses Re: sampling.c and potential divisions by 0 ang log(0) with tablesample and ANALYZE in 9.5
List pgsql-bugs
Hi all,
(Petr in CC)

Coverity is pointing out that anl_random_fract and
sampler_random_fract can return 0, causing in some code paths math
errors, aka division by 0 or even log(0) in the case of TABLESAMPLE or
even ANALYZE.

In 9.4, anl_random_fract is careful enough to use random() + 1 to
prevent that, but that's not the case of 9.5 where we begin to use
pg_erand48, that returns a double in range [0.0,1.0).

I think that we should change the returned double to be (0.0,1.0]
instead like in the patch attached (bernouilli and system methods need
a brush-up as well). I haven't updated tsm_system_rows and
tsm_system_time but their regression diffs are attached.

This bug can be triggered when using TABLESAMPLE, now ANALYZE is more
worrying because it could happen during an auto-analyze.
Thoughts?
--
Michael

Attachment

pgsql-bugs by date:

Previous
From: Noah Misch
Date:
Subject: Re: Re: windows 8 RTM compatibility issue (could not reserve shared memory region for child)
Next
From: hubert depesz lubaczewski
Date:
Subject: Bug in docs - modifiers for to_char()