]> granicus.if.org Git - libevent/commitdiff
evbuffer_find fix from Dug Song
authorNiels Provos <provos@gmail.com>
Sat, 6 Jan 2007 02:25:50 +0000 (02:25 +0000)
committerNiels Provos <provos@gmail.com>
Sat, 6 Jan 2007 02:25:50 +0000 (02:25 +0000)
svn:r308

buffer.c

index 992a2218dd787e3344e00e8710cbdf19210616e5..fe6c30ef4e7b928f065af95e6357ed98ab930330 100644 (file)
--- a/buffer.c
+++ b/buffer.c
@@ -432,12 +432,13 @@ evbuffer_find(struct evbuffer *buffer, const u_char *what, size_t len)
        u_char *search = buffer->buffer;
        u_char *p;
 
-       while ((p = memchr(search, *what, remain)) != NULL && remain >= len) {
+       while ((p = memchr(search, *what, remain)) != NULL) {
+               remain = buffer->off - (size_t)(search - buffer->buffer);
+               if (remain < len)
+                       break;
                if (memcmp(p, what, len) == 0)
                        return (p);
-
                search = p + 1;
-               remain = buffer->off - (size_t)(search - buffer->buffer);
        }
 
        return (NULL);