$OpenBSD: patch-src_torrent_poll_kqueue_cc,v 1.2 2011/01/31 14:59:38 naddy 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	Thu Nov 12 09:03:58 2009
+++ src/torrent/poll_kqueue.cc	Sat Jan 29 01:04:59 2011
@@ -37,6 +37,7 @@
 #include "config.h"
 
 #include <cerrno>
+#include <cassert>
 
 #include <algorithm>
 #include <unistd.h>
@@ -115,7 +116,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) {
