@@ -456,7 +456,7 @@ uint DCV_copy_slice_to(const DeltaChunkVector* src, DeltaChunk* dest, ull ofs, u
456
456
DC_offset_copy_to (cdc , dest , relofs , cdc -> ts - relofs < size ? cdc -> ts - relofs : size );
457
457
cdc += 1 ;
458
458
size -= dest -> ts ;
459
- dest += 1 ;
459
+ dest += 1 ; // must be here, we are reading the size !
460
460
num_chunks += 1 ;
461
461
462
462
if (size == 0 ){
@@ -472,7 +472,7 @@ uint DCV_copy_slice_to(const DeltaChunkVector* src, DeltaChunk* dest, ull ofs, u
472
472
DC_copy_to (cdc , dest ++ );
473
473
size -= cdc -> ts ;
474
474
} else {
475
- DC_offset_copy_to (cdc , dest ++ , 0 , size );
475
+ DC_offset_copy_to (cdc , dest , 0 , size );
476
476
size = 0 ;
477
477
break ;
478
478
}
@@ -526,7 +526,6 @@ bool DCV_connect_with_base(DeltaChunkVector* tdcv, const DeltaChunkVector* bdcv)
526
526
return 0 ;
527
527
}
528
528
529
- fprintf (stderr , "old size = %i\n" , (int )tdcv -> size );
530
529
uint * pofs = offset_array ;
531
530
uint num_addchunks = 0 ;
532
531
@@ -574,17 +573,19 @@ bool DCV_connect_with_base(DeltaChunkVector* tdcv, const DeltaChunkVector* bdcv)
574
573
}
575
574
576
575
// Copy Chunks, and move their target offset into place
576
+ // As we could override dc when slicing, we get the data here
577
+ const ull relofs = dc -> to - dc -> so ;
578
+
577
579
DeltaChunk * tdc = dc + ofs ;
578
580
DeltaChunk * tdcend = tdc + DCV_copy_slice_to (bdcv , tdc , dc -> so , dc -> ts );
579
- const ull relofs = dc -> to - dc -> so ;
580
581
for (;tdc < tdcend ; tdc ++ ){
581
582
tdc -> to += relofs ;
582
583
}
583
584
}
584
585
585
- fprintf (stderr , "NEW size = %i\n" , (int )tdcv -> size );
586
586
DBG_check (tdcv );
587
587
assert (DCV_size (tdcv ) == oldsize );
588
+
588
589
PyMem_Free (offset_array );
589
590
return 1 ;
590
591
}
0 commit comments