Skip to content

Commit a37ec2d

Browse files
committed
Fix remaining exception-unsafe buffer reallocations
1 parent b06da11 commit a37ec2d

3 files changed

Lines changed: 10 additions & 8 deletions

File tree

src/bitstream/DefaultOutputBitStream.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,11 @@ void DefaultOutputBitStream::_close()
175175

176176
// Reset fields to force a flush() and trigger an exception
177177
// on writeBit() or writeBits()
178+
kanzi::byte* buffer = new kanzi::byte[8];
179+
memset(&buffer[0], 0, size_t(8));
178180
delete[] _buffer;
181+
_buffer = buffer;
179182
_bufferSize = 8;
180-
_buffer = new kanzi::byte[_bufferSize];
181-
memset(&_buffer[0], 0, size_t(_bufferSize));
182183
}
183184

184185
// Write buffer to underlying stream

src/entropy/RangeDecoder.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,11 +127,10 @@ int RangeDecoder::decodeHeader(uint frequencies[])
127127
_cumFreqs[0] = 0;
128128

129129
if (_lenF2S < scale) {
130-
if (_f2s != nullptr)
131-
delete[] _f2s;
132-
130+
short* f2s = new short[scale];
131+
delete[] _f2s;
132+
_f2s = f2s;
133133
_lenF2S = scale;
134-
_f2s = new short[_lenF2S];
135134
}
136135

137136
// Create histogram of frequencies scaled to 'range' and reverse mapping

src/transform/LZCodec.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -874,9 +874,11 @@ bool LZPCodec::inverse(SliceArray<kanzi::byte>& input, SliceArray<kanzi::byte>&
874874
kanzi::byte* dst = &output._array[output._index];
875875

876876
if (_hashSize == 0) {
877-
_hashSize = 1 << HASH_LOG;
877+
const int newSize = 1 << HASH_LOG;
878+
int32* hashes = new int32[newSize];
878879
delete[] _hashes;
879-
_hashes = new int32[_hashSize];
880+
_hashes = hashes;
881+
_hashSize = newSize;
880882
}
881883

882884
memset(_hashes, 0, sizeof(int32) * _hashSize);

0 commit comments

Comments
 (0)