diff -ur /tmp/libevent-1.1a/buffer.c /Users/electrum/libevent-1.1a/buffer.c
--- /tmp/libevent-1.1a/buffer.c	2005-06-09 11:35:48.000000000 -0700
+++ /Users/electrum/libevent-1.1a/buffer.c	2005-12-27 23:15:47.000000000 -0800
@@ -403,7 +403,7 @@
 	u_char *search = buffer->buffer;
 	u_char *p;
 
-	while ((p = memchr(search, *what, remain)) != NULL && remain >= len) {
+	while ((p = memchr(search, *what, (remain - len) + 1)) != NULL && remain >= len) {
 		if (memcmp(p, what, len) == 0)
 			return (p);
 
diff -ur /tmp/libevent-1.1a/test/regress.c /Users/electrum/libevent-1.1a/test/regress.c
--- /tmp/libevent-1.1a/test/regress.c	2005-04-03 17:26:25.000000000 -0700
+++ /Users/electrum/libevent-1.1a/test/regress.c	2005-12-27 23:12:12.000000000 -0800
@@ -637,6 +637,31 @@
    cleanup_test();
 }
 
+void
+test_evbuffer_find()
+{
+	struct evbuffer *buf;
+	u_char *p;
+
+	setup_test("evbuffer_find: ");
+
+	if ((buf = evbuffer_new()) == NULL) {
+		fprintf(stderr, "%s: evbuffer_new() failed", __func__);
+		exit(1);
+	}
+
+	evbuffer_add(buf, "abc", 3);
+	evbuffer_drain(buf, 3);
+	evbuffer_add(buf, "ab", 2);
+
+	p = evbuffer_find(buf, (u_char *) "bc", 2);
+
+	test_ok = (p == NULL);
+
+	evbuffer_free(buf);
+	cleanup_test();
+}
+
 
 int
 main (int argc, char **argv)
@@ -680,6 +705,8 @@
 
 	test_multiple_events_for_same_fd();
 
+	test_evbuffer_find();
+
 	return (0);
 }
 
