From: | Amit Langote <amitlangote09(at)gmail(dot)com> |
---|---|
To: | Alvaro Herrera <alvherre(at)2ndquadrant(dot)com> |
Cc: | PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Computer VARSIZE_ANY(PTR) during debugging |
Date: | 2013-06-26 16:03:25 |
Message-ID: | CA+HiwqGXCV8-xCaPMqKqqRaCpZ=BRxZ3RixiML+Y0AiXwn87yw@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Thu, Jun 27, 2013 at 12:02 AM, Alvaro Herrera
<alvherre(at)2ndquadrant(dot)com> wrote:
> Amit Langote escribió:
>
>> The segfault in question happens at line 1141:
>>
>> off = att_align_pointer(off, thisatt->attalign, -1, tp + off);
>>
>> char *tp; /* ptr to tuple data */
>> long off; /* offset in tuple data */
>>
>> Disassembling seems to suggest (tp + off) is the faulting address.
>> Apparently, the segfault happens when 5th text column is being
>> extracted from a tuple (char(n), char(n), int4, char(n), text, ...).
>> Since, tp is fixed for the whole duration of loop and only off is
>> subject to change over iterations, it may have happened due to wrong
>> offset in this iteration.
>>
>> Has anything of this kind been encountered/reported before?
>
> Yes, I vaguely recall I have seen this in cases where tuples contain
> corrupt data. I think you just need the length word of the fourth datum
> to be wrong.
>
The query in question is:
select col1, col2, col4, octet_length(col5) from table where
octet_length(col5) > 8000000;
In case of corrupt data, even select * from table should give
segfault, shouldn't it?
--
Amit Langote
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2013-06-26 16:07:54 | Re: PQConnectPoll, connect(2), EWOULDBLOCK and somaxconn |
Previous Message | Atri Sharma | 2013-06-26 16:02:01 | Re: A better way than tweaking NTUP_PER_BUCKET |