summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/inspsocket.cpp2
-rw-r--r--src/socketengine.cpp9
-rw-r--r--src/socketengine_iocp.cpp11
-rw-r--r--src/users.cpp6
4 files changed, 23 insertions, 5 deletions
diff --git a/src/inspsocket.cpp b/src/inspsocket.cpp
index edb58a05c..3eddb6f62 100644
--- a/src/inspsocket.cpp
+++ b/src/inspsocket.cpp
@@ -378,6 +378,8 @@ std::string InspSocket::GetIP()
char* InspSocket::Read()
{
+ if (Instance->SE->BoundsCheckFd(this))
+ return NULL;
#ifdef WINDOWS
if ((fd < 0) || (m_internalFd > MAX_DESCRIPTORS))
#else
diff --git a/src/socketengine.cpp b/src/socketengine.cpp
index 48f7e11bf..28ba8c252 100644
--- a/src/socketengine.cpp
+++ b/src/socketengine.cpp
@@ -91,3 +91,12 @@ std::string SocketEngine::GetName()
return "misconfigured";
}
+bool SocketEngine::BoundsCheckFd(EventHandler* eh)
+{
+ if (!eh)
+ return false;
+ if ((eh->GetFd() < 0) || (eh->GetFd() > MAX_DESCRIPTORS))
+ return false;
+ return true;
+}
+
diff --git a/src/socketengine_iocp.cpp b/src/socketengine_iocp.cpp
index c61b44062..dad8b8a0a 100644
--- a/src/socketengine_iocp.cpp
+++ b/src/socketengine_iocp.cpp
@@ -420,6 +420,17 @@ bool IOCPEngine::HasFd(int fd)
return (GetRef(fd) != 0);
}
+bool IOCPEngine::BoundsCheckFd(EventHandler* eh)
+{
+ if (!eh)
+ return false;
+ if ((eh->m_internalFd < 0) || (eh->m_internalFd > MAX_DESCRIPTORS))
+ return false;
+ if ((eh->GetFd() < 0) || (eh->GetFd() > MAX_DESCRIPTORS))
+ return false;
+ return true;
+}
+
EventHandler * IOCPEngine::GetIntRef(int fd)
{
if(fd < 0 || fd > MAX_DESCRIPTORS)
diff --git a/src/users.cpp b/src/users.cpp
index 12742bbc9..efaffd2dd 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -1354,11 +1354,7 @@ const char* userrec::GetIPString(char* buf)
*/
void userrec::Write(std::string text)
{
-#ifdef WINDOWS
- if ((this->fd < 0) || (this->m_internalFd > MAX_DESCRIPTORS))
-#else
- if ((this->fd < 0) || (this->fd > MAX_DESCRIPTORS))
-#endif
+ if (ServerInstance->SE->BoundsCheckFd(this))
return;
try