@@ -4089,11 +4089,13 @@ copytup_rumkey(Tuplesortstate *state, SortTuple *stup, void *tup)
40894089static void
40904090writetup_rumkey (Tuplesortstate * state , int tapenum , SortTuple * stup )
40914091{
4092- RumKey * item = (RumKey * ) stup -> tuple ;
4093- unsigned int writtenlen = sizeof (* item );
4092+ RumKey * item = (RumKey * ) stup -> tuple ;
4093+ unsigned int writtenlen = sizeof (* item ) + sizeof ( unsigned int ) ;
40944094
40954095 LogicalTapeWrite (state -> tapeset , tapenum ,
4096- (void * ) item , writtenlen );
4096+ (void * ) & writtenlen , sizeof (writtenlen ));
4097+ LogicalTapeWrite (state -> tapeset , tapenum ,
4098+ (void * ) item , sizeof (* item ));
40974099 if (state -> randomAccess ) /* need trailing length word? */
40984100 LogicalTapeWrite (state -> tapeset , tapenum ,
40994101 (void * ) & writtenlen , sizeof (writtenlen ));
@@ -4106,18 +4108,19 @@ static void
41064108readtup_rumkey (Tuplesortstate * state , SortTuple * stup ,
41074109 int tapenum , unsigned int len )
41084110{
4109- RumKey * item = (RumKey * ) palloc (sizeof (RumKey ));
4111+ unsigned int tuplen = len - sizeof (unsigned int );
4112+ RumKey * item = (RumKey * ) palloc (sizeof (RumKey ));
41104113
4111- Assert (len == sizeof (RumKey ));
4114+ Assert (tuplen == sizeof (RumKey ));
41124115
41134116 USEMEM (state , GetMemoryChunkSpace (item ));
41144117 LogicalTapeReadExact (state -> tapeset , tapenum ,
4115- (void * ) item , len );
4118+ (void * ) item , tuplen );
41164119 stup -> isnull1 = true;
41174120 stup -> tuple = item ;
41184121
41194122 if (state -> randomAccess ) /* need trailing length word? */
41204123 LogicalTapeReadExact (state -> tapeset , tapenum ,
4121- & len , sizeof (len ));
4124+ & tuplen , sizeof (tuplen ));
41224125}
41234126
0 commit comments