diff -ur libevent-1.2-orig/buffer.c libevent-1.2/buffer.c
--- libevent-1.2-orig/buffer.c	Sun Feb 12 20:54:58 2006
+++ libevent-1.2/buffer.c	Sun Feb 12 23:20:11 2006
@@ -411,7 +411,10 @@
 	u_char *search = buffer->buffer;
 	u_char *p;
 
-	while ((p = memchr(search, *what, remain)) != NULL && remain >= len) {
+	while (remain >= len) {
+		if ((p = memchr(search, *what, (remain - len) + 1)) == NULL)
+			break;
+
 		if (memcmp(p, what, len) == 0)
 			return (p);
 
diff -ur libevent-1.2-orig/test/regress.c libevent-1.2/test/regress.c
--- libevent-1.2-orig/test/regress.c	Sun Feb 12 20:54:58 2006
+++ libevent-1.2/test/regress.c	Sun Feb 12 23:23:47 2006
@@ -494,6 +494,24 @@
 }
 
 void
+test_evbuffer_find(void) {
+	setup_test("Evbuffer find: ");
+
+	struct evbuffer *evb = evbuffer_new();
+	char *p;
+
+	evbuffer_add(evb, "abc", 3);
+	evbuffer_drain(evb, 3);
+	evbuffer_add(evb, "ab", 2);
+
+	p = evbuffer_find(evb, "bc", 2);
+	if (p == NULL)
+		test_ok = 1;
+	
+	cleanup_test();
+}
+
+void
 readcb(struct bufferevent *bev, void *arg)
 {
 	if (EVBUFFER_LENGTH(bev->input) == 8333) {
@@ -889,6 +907,8 @@
 	test_loopexit();
 
 	test_evbuffer();
+
+	test_evbuffer_find();
 	
 	test_bufferevent();
 
