From: Willy Tarreau Date: Mon, 28 Dec 2009 17:37:54 +0000 (+0100) Subject: [BUG] buffers: wrong size calculation for displaced data X-Git-Tag: v1.4-dev5~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=019fd5bc932e2527c4a7bf196903aa1055537c1f;p=thirdparty%2Fhaproxy.git [BUG] buffers: wrong size calculation for displaced data This error was triggered by requests not starting at the beginning of the buffer. It cannot happen with earlier versions though it might be a good idea to fix it anyway. --- diff --git a/src/buffers.c b/src/buffers.c index 939b03d047..f9b5aa46bb 100644 --- a/src/buffers.c +++ b/src/buffers.c @@ -197,7 +197,7 @@ int buffer_replace(struct buffer *b, char *pos, char *end, const char *str) return 0; /* no space left */ /* first, protect the end of the buffer */ - memmove(end + delta, end, b->data + b->l - end); + memmove(end + delta, end, b->r - end); /* now, copy str over pos */ memcpy(pos, str,len); @@ -237,7 +237,7 @@ int buffer_replace2(struct buffer *b, char *pos, char *end, const char *str, int } /* first, protect the end of the buffer */ - memmove(end + delta, end, b->data + b->l - end); + memmove(end + delta, end, b->r - end); /* now, copy str over pos */ if (len) @@ -278,7 +278,7 @@ int buffer_insert_line2(struct buffer *b, char *pos, const char *str, int len) return 0; /* no space left */ /* first, protect the end of the buffer */ - memmove(pos + delta, pos, b->data + b->l - pos); + memmove(pos + delta, pos, b->r - pos); /* now, copy str over pos */ if (len && str) {