Обсуждение: pgsql: Fix unaligned accesses in DecodeUpdate().

Поиск
Список
Период
Сортировка

pgsql: Fix unaligned accesses in DecodeUpdate().

От
Tom Lane
Дата:
Fix unaligned accesses in DecodeUpdate().

The xl_heap_header_len structures in an XLOG_HEAP_UPDATE record aren't
necessarily aligned adequately.  The regular replay function for these
records is aware of that, but decode.c didn't get the memo.  I'm not
sure why the buildfarm failed to catch this; the test_decoding test
certainly blows up real good on my old HPPA box.

Also, I'm pretty sure that the address arithmetic was wrong for the
case of XLOG_HEAP_CONTAINS_OLD and not XLOG_HEAP_CONTAINS_NEW_TUPLE,
though this apparently can't happen when logical decoding is active.

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/6c42b2b10af3f717030966b9f05867f3e065becc

Modified Files
--------------
src/backend/replication/logical/decode.c |   27 +++++++++++++++++----------
1 file changed, 17 insertions(+), 10 deletions(-)


Re: pgsql: Fix unaligned accesses in DecodeUpdate().

От
Andres Freund
Дата:
Hi,

On 2014-05-17 19:54:05 +0000, Tom Lane wrote:
> Fix unaligned accesses in DecodeUpdate().

> The xl_heap_header_len structures in an XLOG_HEAP_UPDATE record aren't
> necessarily aligned adequately.  The regular replay function for these
> records is aware of that, but decode.c didn't get the memo.  I'm not
> sure why the buildfarm failed to catch this; the test_decoding test
> certainly blows up real good on my old HPPA box.

Hm. It's too bad it's hard to see these cases on x86. I wondered before
why valgrind doesn't catch those...

Some mozilla devs seem to have whipped the feature up quickly enough:
https://bugzilla.mozilla.org/show_bug.cgi?id=476122
Too bad it's not been integrated.

> Also, I'm pretty sure that the address arithmetic was wrong for the
> case of XLOG_HEAP_CONTAINS_OLD and not XLOG_HEAP_CONTAINS_NEW_TUPLE,
> though this apparently can't happen when logical decoding is active.

Yes, that's impossible. It'd be a bit pointless to decode an update
where the new value isn't available. Would kinda hurt while
replicability...

Thanks for fixing.

Andres Freund

--
 Andres Freund                       http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services