@@ -625,15 +625,16 @@ DecodeInsert(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
625
625
626
626
if (xlrec -> flags & XLOG_HEAP_CONTAINS_NEW_TUPLE )
627
627
{
628
- Size tuplelen = r -> xl_len - SizeOfHeapInsert ;
628
+ Size datalen = r -> xl_len - SizeOfHeapInsert ;
629
+ Size tuplelen = datalen - SizeOfHeapHeader ;
629
630
630
631
Assert (r -> xl_len > (SizeOfHeapInsert + SizeOfHeapHeader ));
631
632
632
633
change -> data .tp .newtuple =
633
634
ReorderBufferGetTupleBuf (ctx -> reorder , tuplelen );
634
635
635
636
DecodeXLogTuple ((char * ) xlrec + SizeOfHeapInsert ,
636
- tuplelen , change -> data .tp .newtuple );
637
+ datalen , change -> data .tp .newtuple );
637
638
}
638
639
639
640
change -> data .tp .clear_toast_afterwards = true;
@@ -670,6 +671,7 @@ DecodeUpdate(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
670
671
671
672
if (xlrec -> flags & XLOG_HEAP_CONTAINS_NEW_TUPLE )
672
673
{
674
+ Size datalen ;
673
675
Size tuplelen ;
674
676
xl_heap_header_len xlhdr ;
675
677
@@ -678,12 +680,13 @@ DecodeUpdate(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
678
680
memcpy (& xlhdr , data , sizeof (xlhdr ));
679
681
data += offsetof(xl_heap_header_len , header );
680
682
681
- tuplelen = xlhdr .t_len + SizeOfHeapHeader ;
683
+ datalen = xlhdr .t_len + SizeOfHeapHeader ;
684
+ tuplelen = xlhdr .t_len ;
682
685
683
686
change -> data .tp .newtuple =
684
687
ReorderBufferGetTupleBuf (ctx -> reorder , tuplelen );
685
688
686
- DecodeXLogTuple (data , tuplelen , change -> data .tp .newtuple );
689
+ DecodeXLogTuple (data , datalen , change -> data .tp .newtuple );
687
690
/* skip over the rest of the tuple header */
688
691
data += SizeOfHeapHeader ;
689
692
/* skip over the tuple data */
@@ -692,18 +695,20 @@ DecodeUpdate(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
692
695
693
696
if (xlrec -> flags & XLOG_HEAP_CONTAINS_OLD )
694
697
{
698
+ Size datalen ;
695
699
Size tuplelen ;
696
700
xl_heap_header_len xlhdr ;
697
701
698
702
memcpy (& xlhdr , data , sizeof (xlhdr ));
699
703
data += offsetof(xl_heap_header_len , header );
700
704
701
- tuplelen = xlhdr .t_len + SizeOfHeapHeader ;
705
+ datalen = xlhdr .t_len + SizeOfHeapHeader ;
706
+ tuplelen = xlhdr .t_len ;
702
707
703
708
change -> data .tp .oldtuple =
704
709
ReorderBufferGetTupleBuf (ctx -> reorder , tuplelen );
705
710
706
- DecodeXLogTuple (data , tuplelen , change -> data .tp .oldtuple );
711
+ DecodeXLogTuple (data , datalen , change -> data .tp .oldtuple );
707
712
#ifdef NOT_USED
708
713
data += SizeOfHeapHeader ;
709
714
data += xlhdr .t_len ;
@@ -741,15 +746,16 @@ DecodeDelete(LogicalDecodingContext *ctx, XLogRecordBuffer *buf)
741
746
/* old primary key stored */
742
747
if (xlrec -> flags & XLOG_HEAP_CONTAINS_OLD )
743
748
{
744
- Size len = r -> xl_len - SizeOfHeapDelete ;
749
+ Size datalen = r -> xl_len - SizeOfHeapDelete ;
750
+ Size tuplelen = datalen - SizeOfHeapHeader ;
745
751
746
752
Assert (r -> xl_len > (SizeOfHeapDelete + SizeOfHeapHeader ));
747
753
748
754
change -> data .tp .oldtuple =
749
- ReorderBufferGetTupleBuf (ctx -> reorder , len );
755
+ ReorderBufferGetTupleBuf (ctx -> reorder , tuplelen );
750
756
751
757
DecodeXLogTuple ((char * ) xlrec + SizeOfHeapDelete ,
752
- len , change -> data .tp .oldtuple );
758
+ datalen , change -> data .tp .oldtuple );
753
759
}
754
760
755
761
change -> data .tp .clear_toast_afterwards = true;
0 commit comments