Browse Source

one character was not compared for the string-length was below sizeof(size_t)

git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.3.x@437 152afb58-edef-0310-8abb-c4023f1b3aa9
svn/tags/lighttpd-1.3.15
Jan Kneschke 17 years ago
parent
commit
09903fa706
  1. 8
      src/buffer.c

8
src/buffer.c

@ -517,15 +517,19 @@ int buffer_is_equal(buffer *a, buffer *b) {
if (a->used != b->used) return 0;
if (a->used == 0) return 1;
for (i = a->used - 1; i < a->used && i % (sizeof(size_t)); i --) {
/* we are unsigned, if i < 0 it will flip to MAX_SIZE_T and will be > a->used */
for (i = a->used - 1; i < a->used && i % (sizeof(size_t)); i--) {
if (a->ptr[i] != b->ptr[i]) return 0;
}
/* compare the single char itself which was kicked us out of the loop */
if (i < a->used && a->ptr[i] != b->ptr[i]) return 0;
for (i -= (sizeof(size_t)); i < a->used; i -= (sizeof(size_t))) {
if (*((size_t *)(a->ptr + i)) !=
*((size_t *)(b->ptr + i))) return 0;
}
return 1;
}

Loading…
Cancel
Save