From 642b21c7546728f3a2e1505ee44f2e67fea7b05a Mon Sep 17 00:00:00 2001 From: brain Date: Tue, 14 Feb 2006 20:06:56 +0000 Subject: [PATCH] Error checking for out of range buffer reads (this shouldnt happen, read is being passed a max buffer size of 65536 but returning 6 million?! We check for it now.) git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@3196 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/modules/m_spanningtree.cpp | 10 ++-------- src/socket.cpp | 6 ++++-- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/src/modules/m_spanningtree.cpp b/src/modules/m_spanningtree.cpp index 0514723a0..88021374b 100644 --- a/src/modules/m_spanningtree.cpp +++ b/src/modules/m_spanningtree.cpp @@ -1414,17 +1414,11 @@ class TreeSocket : public InspSocket } /* Handle ERROR command */ - bool Error(std::deque params) + bool Error(std::deque ¶ms) { if (params.size() < 1) return false; - std::string Errmsg = params[0]; - std::string SName = myhost; - if (InboundServerName != "") - { - SName = InboundServerName; - } - Srv->SendOpers("*** ERROR from "+SName+": "+Errmsg); + WriteOpers("*** ERROR from %s: %s",(InboundServerName != "" ? InboundServerName.c_str() : myhost.c_str()),params[0].c_str()); /* we will return false to cause the socket to close. */ return false; diff --git a/src/socket.cpp b/src/socket.cpp index 550783aed..4528090d4 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -209,15 +209,17 @@ std::string InspSocket::GetIP() char* InspSocket::Read() { + if ((n < 0) || (n > MAX_DESCRIPTOR)) + return NULL; int n = recv(this->fd,this->ibuf,sizeof(this->ibuf),0); - if (n > 0) + if ((n > 0) && (n <= sizeof(this->ibuf))) { ibuf[n] = 0; return ibuf; } else { - if (n == EAGAIN) + if (errno == EAGAIN) { return ""; } -- 2.39.2