Re: BUG #17774: Assert triggered on brin_minmax_multi.c
От | Dmitry Dolgov |
---|---|
Тема | Re: BUG #17774: Assert triggered on brin_minmax_multi.c |
Дата | |
Msg-id | 20230211190037.m2rbm674zglr2d3m@erthalion.local обсуждение исходный текст |
Ответ на | Re: BUG #17774: Assert triggered on brin_minmax_multi.c (Tomas Vondra <tomas.vondra@enterprisedb.com>) |
Ответы |
Re: BUG #17774: Assert triggered on brin_minmax_multi.c
|
Список | pgsql-bugs |
> On Thu, Feb 09, 2023 at 05:18:47PM +0100, Tomas Vondra wrote: > > I believe the bug is pretty trivial - the code applies the netmask > incorrectly, so that with 127.0.0.1/0 it ends with 0.0.0.1, and because > it assumes 0.0.0.1 < 0.0.0.0 it ends with negative delta. > > In particular, the issue is that the code does this: > > lena = ip_bits(ipa); -- 0 > len = ip_addrsize(ipa); -- 4 > > for (for (i = 0; i < len; i++) > { > nbits = lena - (i * 8); > ... > mask = (0xFF << (8 - nbits)); > ... > } > > But for 127.0.0.1/0 we get lena=0, so for i>0 nbits gets negative, and > the shift is probably going to do something silly (not sure what > exactly, but AFAICS it's undefined behavior). > > Attached is a fixup that resolves this failure for me. I need to look a > bit closer if there are some other issues (e.g. with the float rounding > errors, etc.). Thanks, the fix looks good and solves the issue. With the patch applied after a quick round of testing I haven't found any failures so far, whether due to float arithmetic or something else.
В списке pgsql-bugs по дате отправления: