mirror of
https://github.com/webmproject/libwebp.git
synced 2025-07-13 06:24:27 +02:00
Fix bad bit writer initialization.
When re-initializing a bit writer, we could set invalid values because the bit writer was not big enough. Change-Id: Id25ab6712603245a5a12d5f4a86fe35a9a799a5d
This commit is contained in:
@ -239,6 +239,19 @@ int VP8LBitWriterInit(VP8LBitWriter* const bw, size_t expected_size) {
|
||||
return VP8LBitWriterResize(bw, expected_size);
|
||||
}
|
||||
|
||||
int VP8LBitWriterClone(const VP8LBitWriter* const src,
|
||||
VP8LBitWriter* const dst) {
|
||||
const size_t current_size = src->cur_ - src->buf_;
|
||||
assert(src->cur_ >= src->buf_ && src->cur_ <= src->end_);
|
||||
memset(dst, 0, sizeof(*dst));
|
||||
if (!VP8LBitWriterResize(dst, current_size)) return 0;
|
||||
memcpy(dst->buf_, src->buf_, current_size);
|
||||
dst->bits_ = src->bits_;
|
||||
dst->used_ = src->used_;
|
||||
dst->error_ = src->error_;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void VP8LBitWriterWipeOut(VP8LBitWriter* const bw) {
|
||||
if (bw != NULL) {
|
||||
WebPSafeFree(bw->buf_);
|
||||
@ -251,6 +264,7 @@ void VP8LBitWriterReset(const VP8LBitWriter* const bw_init,
|
||||
bw->bits_ = bw_init->bits_;
|
||||
bw->used_ = bw_init->used_;
|
||||
bw->cur_ = bw->buf_ + (bw_init->cur_ - bw_init->buf_);
|
||||
assert(bw->cur_ <= bw->end_);
|
||||
bw->error_ = bw_init->error_;
|
||||
}
|
||||
|
||||
|
@ -106,6 +106,9 @@ static WEBP_INLINE size_t VP8LBitWriterNumBytes(VP8LBitWriter* const bw) {
|
||||
|
||||
// Returns false in case of memory allocation error.
|
||||
int VP8LBitWriterInit(VP8LBitWriter* const bw, size_t expected_size);
|
||||
// Returns false in case of memory allocation error.
|
||||
int VP8LBitWriterClone(const VP8LBitWriter* const src,
|
||||
VP8LBitWriter* const dst);
|
||||
// Finalize the bitstream coding. Returns a pointer to the internal buffer.
|
||||
uint8_t* VP8LBitWriterFinish(VP8LBitWriter* const bw);
|
||||
// Release any pending memory and zeroes the object.
|
||||
|
Reference in New Issue
Block a user