$OpenBSD: patch-src_torrent_poll_kqueue_cc,v 1.3 2011/12/01 17:10:40 dcoppa Exp $

The number of events is used to index an array of maxOpenSockets
(file descriptors) elements. If there are fewer fds than maxEvents,
this will cause a segfault.

Limit the number of events to the number of fds with an upper limit of
maxEvents.

--- src/torrent/poll_kqueue.cc.orig	Tue Apr  5 12:25:53 2011
+++ src/torrent/poll_kqueue.cc	Wed Oct 19 21:42:06 2011
@@ -37,6 +37,7 @@
 #include "config.h"
 
 #include <cerrno>
+#include <cassert>
 
 #include <algorithm>
 #include <unistd.h>
@@ -116,7 +117,7 @@ PollKQueue::create(int maxOpenSockets) {
 
 PollKQueue::PollKQueue(int fd, int maxEvents, int maxOpenSockets) :
   m_fd(fd),
-  m_maxEvents(maxEvents),
+  m_maxEvents((maxOpenSockets < maxEvents) ? maxOpenSockets : maxEvents),
   m_waitingEvents(0),
   m_changedEvents(0),
   m_stdinEvent(NULL) {
