--------------------- PatchSet 10352 Date: 2008/01/02 17:13:59 Author: adri Branch: s27_adri Tag: (none) Log: Fix off-by-one size comparisons; add some #define's to help check stuff. Members: libbuf/bufregion.c:1.1.2.1->1.1.2.2 libbuf/bufregion.h:1.1.2.1->1.1.2.2 Index: squid/libbuf/bufregion.c =================================================================== RCS file: /cvsroot/squid-sf//squid/libbuf/Attic/bufregion.c,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -r1.1.2.1 -r1.1.2.2 --- squid/libbuf/bufregion.c 24 Dec 2007 14:11:52 -0000 1.1.2.1 +++ squid/libbuf/bufregion.c 2 Jan 2008 17:13:59 -0000 1.1.2.2 @@ -28,8 +28,8 @@ void bufregion_init_buf(bufregion_t *br, buf_t *b, int offset, int length) { - assert(offset < buf_len(b)); - assert(offset + length < buf_len(b)); + assert(offset <= buf_len(b)); + assert(offset + length <= buf_len(b)); br->b = buf_ref(b); buf_make_immutable(br->b, offset + length); br->offset = offset; @@ -39,10 +39,20 @@ void bufregion_init_region(bufregion_t *br, bufregion_t *src, int offset, int length) { - assert(offset < src->offset + src->length); - assert(offset + length < src->offset + src->length); + assert(offset <= src->offset + src->length); + assert(offset + length <= src->offset + src->length); br->b = buf_ref(src->b); br->offset = src->offset + offset; br->length = src->offset + length; buf_make_immutable(br->b, br->offset + br->length); } + +int +bufregion_grow(bufregion_t *br, int newlen) +{ + if (buf_len(br->b) + br->offset + newlen >= buf_capacity(br->b)) + return 0; + br->length = newlen; + buf_make_immutable(br->b, br->offset + newlen); + return 1; +} Index: squid/libbuf/bufregion.h =================================================================== RCS file: /cvsroot/squid-sf//squid/libbuf/Attic/bufregion.h,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -r1.1.2.1 -r1.1.2.2 --- squid/libbuf/bufregion.h 24 Dec 2007 14:11:53 -0000 1.1.2.1 +++ squid/libbuf/bufregion.h 2 Jan 2008 17:13:59 -0000 1.1.2.2 @@ -12,7 +12,11 @@ extern void bufregion_free(bufregion_t *br); extern void bufregion_init_buf(bufregion_t *br, buf_t *b, int offset, int length); extern void bufregion_init_region(bufregion_t *br, bufregion_t *src, int offset, int length); +extern int bufregion_grow(bufregion_t *br, int newlen); +#define bufRegionIsNull(br) ( (br).b == NULL ) +#define bufRegionIsNotNull(br) ( (br).b != NULL ) +#define bufRegionBuf(br) ( buf_buf((br).b) + br.offset ) #define bufRegionLen(br) ( (br).length ) static inline int