Merge pull request #21793 from bfredl/noringbuf

fix(rbuffer): handle edge case where write_ptr has wrapped around too early
This commit is contained in:
bfredl 2023-01-14 13:06:22 +01:00 committed by GitHub
commit bf08390442
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -165,7 +165,8 @@ void rbuffer_consumed_compact(RBuffer *buf, size_t count)
assert(buf->read_ptr <= buf->write_ptr); assert(buf->read_ptr <= buf->write_ptr);
rbuffer_consumed(buf, count); rbuffer_consumed(buf, count);
if (buf->read_ptr > buf->start_ptr) { if (buf->read_ptr > buf->start_ptr) {
assert((size_t)(buf->read_ptr - buf->write_ptr) == buf->size); assert((size_t)(buf->write_ptr - buf->read_ptr) == buf->size
|| buf->write_ptr == buf->start_ptr);
memmove(buf->start_ptr, buf->read_ptr, buf->size); memmove(buf->start_ptr, buf->read_ptr, buf->size);
buf->read_ptr = buf->start_ptr; buf->read_ptr = buf->start_ptr;
buf->write_ptr = buf->read_ptr + buf->size; buf->write_ptr = buf->read_ptr + buf->size;