Files
pkgsrc-ng/www/dansguardian/patches/patch-src_BaseSocket.cpp
2016-11-18 22:39:22 +01:00

56 lines
1.6 KiB
C++

$NetBSD: patch-src_BaseSocket.cpp,v 1.1 2016/04/20 13:52:24 prlw1 Exp $
Defend against calling select() with nfds >= FD_SETSIZE. PR pkg/50995
https://github.com/e2guardian/e2guardian/issues/119
--- src/BaseSocket.cpp.orig 2012-09-29 20:06:45.000000000 +0000
+++ src/BaseSocket.cpp
@@ -61,6 +61,12 @@ int selectEINTR(int numfds, fd_set * rea
timeval exittime;
timeval elapsedtime;
timeval timeoutcopy;
+
+ if (numfds >= FD_SETSIZE) {
+ syslog(LOG_ERR, "selectEINTR called with numfds (%d) >= FD_SETSIZE (%d)", numfds, FD_SETSIZE);
+ errno = EBADF;
+ return -1;
+ }
while (true) { // using the while as a restart point with continue
if (timeout != NULL) {
gettimeofday(&entrytime, NULL);
@@ -313,6 +319,9 @@ int BaseSocket::getLine(char *buff, int
#endif
//if there was a socket error
if (bufflen < 0) {
+#ifdef DGDEBUG
+ syslog(LOG_ERR, "getLine recv returned error = %d (%m)\n", errno);
+#endif
if (errno == EINTR && (honour_reloadconfig ? !reloadconfig : true)) {
continue;
}
@@ -423,6 +432,9 @@ int BaseSocket::readFromSocketn(char *bu
}
rc = recv(sck, buff, cnt, flags);
if (rc < 0) {
+#ifdef DGDEBUG
+ syslog(LOG_ERR, "readFromSocketn recv returned error = %d (%m)\n", errno);
+#endif
if (errno == EINTR) {
continue;
}
@@ -473,9 +485,14 @@ int BaseSocket::readFromSocket(char *buf
while (true) {
rc = recv(sck, buff, cnt, flags);
if (rc < 0) {
+#ifdef DGDEBUG
+ syslog(LOG_ERR, "readFromSocket recv returned unhandled? error = %d (%m)\n", errno);
+#endif
if (errno == EINTR && (honour_reloadconfig ? !reloadconfig : true)) {
continue;
}
+ sleep(1);
+ continue;
}
break;