# HG changeset patch # User Daniel Atallah # Date 1241068781 0 # Node ID 70df8067d41ead6c8b7e2e67921a237d0f784a30 # Parent dfd7be3e3cb781ac504a62a4d6d2424a9cc46206 Backport 7829ec76bdb008583f8da54e238c2265a1140db2 (#8706 - Corruption in PurpleCircBuffer) diff -r dfd7be3e3cb7 -r 70df8067d41e COPYRIGHT --- a/COPYRIGHT Thu Apr 30 05:18:04 2009 +0000 +++ b/COPYRIGHT Thu Apr 30 05:19:41 2009 +0000 @@ -8,6 +8,7 @@ Dave Ahlswede Manuel Amador Matt Amato +Josef Andrysek Geoffrey Antos Daniel Atallah Paul Aurich diff -r dfd7be3e3cb7 -r 70df8067d41e libpurple/circbuffer.c --- a/libpurple/circbuffer.c Thu Apr 30 05:18:04 2009 +0000 +++ b/libpurple/circbuffer.c Thu Apr 30 05:19:41 2009 +0000 @@ -68,7 +68,8 @@ /* If the fill pointer is wrapped to before the remove * pointer, we need to shift the data */ - if (in_offset < out_offset) { + if (in_offset < out_offset + || (in_offset == out_offset && buf->bufused > 0)) { int shift_n = MIN(buf->buflen - start_buflen, in_offset); memcpy(buf->buffer + start_buflen, buf->buffer,