Skip to content

Commit

Permalink
Builder: avoid unsound buffer reuse (#690)
Browse files Browse the repository at this point in the history
  • Loading branch information
adamgundry committed Aug 2, 2024
1 parent 594966b commit f2378bd
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions Data/ByteString/Builder/Internal.hs
Original file line number Diff line number Diff line change
Expand Up @@ -1196,7 +1196,7 @@ buildStepToCIOS (AllocationStrategy nextBuffer bufSize trim) =
-- Checking for empty case avoids allocating 'n-1' empty
-- buffers for 'n' insertChunkH right after each other.
if isEmpty
then fill nextStep (Buffer fpbuf (BufferRange pbuf pe))
then fill nextStep buf
else do buf' <- nextBuffer (Just (buf, bufSize))
fill nextStep buf'

Expand All @@ -1208,9 +1208,9 @@ buildStepToCIOS (AllocationStrategy nextBuffer bufSize trim) =
| trim chunkSize size = do
bs <- S.createFp chunkSize $ \fpbuf' ->
S.memcpyFp fpbuf' fpbuf chunkSize
-- Instead of allocating a new buffer after trimming,
-- we re-use the old buffer and consider it empty.
return $ Yield1 bs (mkCIOS True)
-- It is not safe to re-use the old buffer (see #690),
-- so we allocate a new buffer after trimming.
return $ Yield1 bs (mkCIOS False)
| otherwise =
return $ Yield1 (S.BS fpbuf chunkSize) (mkCIOS False)
where
Expand Down

0 comments on commit f2378bd

Please sign in to comment.