Re: BUG #15121: Multiple UBSAN errors

From: Tomas Vondra <tomas(dot)vondra(at)2ndquadrant(dot)com>
To: Martin Liška <marxin(dot)liska(at)gmail(dot)com>
Cc: pgsql-bugs(at)lists(dot)postgresql(dot)org, PG Bug reporting form <noreply(at)postgresql(dot)org>
Subject: Re: BUG #15121: Multiple UBSAN errors
Date: 2018-03-19 18:07:49
Message-ID: 7f798f51-05c4-304a-f852-9cea35f5f095@2ndquadrant.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On 03/19/2018 03:28 PM, Martin Liška wrote:
> On 19 March 2018 at 15:26, Tomas Vondra <tomas(dot)vondra(at)2ndquadrant(dot)com> wrote:
>> On 03/19/2018 09:59 AM, Martin Liška wrote:
>>> On 19 March 2018 at 01:34, Tomas Vondra <tomas(dot)vondra(at)2ndquadrant(dot)com> wrote:
>>>
>>> ...
>>>>
>>>> Again, the line numbers don't really match the code I have, but I guess
>>>> it's the same issue as for pg_comp_crc32c_sse42. This is apparently
>>>> related to array serialization, and I guess we have a compact structure
>>>> (intentionally, to make it smaller), and we accept the unaligned access.
>>>
>>> Note that building postgresql with -03, I see some array tests failing.
>>>
>>
>> I'm unable to reproduce that. I do get a bunch of compile-time warnings
>> about possibly uninitialized variables (which seem bogus after a quick
>> inspection), but no failures.
>
> Note that the errrors I reported come from running an instrumented postgres
> with "-fsanitize=undefined -g" option.
>

I'm getting failures in errors, union and alter_table, but none of those
are related to arrays. So, which tests are failing for you and how do
the failures look like?

I've tried both gcc 7.3 and trunk, and all failures look like this:

-- this used to be a syntax error, but now we allow an empty target list
select;
+ print.c:916:4: runtime error: null pointer passed as argument 1, which
is declared to never be null
+ /usr/include/bits/string3.h:90:10: runtime error: null pointer passed
as argument 1, which is declared to never be null

Which seems to trigger the error on this line in print.c:

memset(header_done, false, col_count * sizeof(bool));

likely because with empty select list col_count=0. So about the same
cause as for fwrite().

--
Tomas Vondra http://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Lane 2018-03-19 18:20:33 Re: BUG #15121: Multiple UBSAN errors
Previous Message Martin Liška 2018-03-19 14:28:48 Re: BUG #15121: Multiple UBSAN errors