summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2006-02-14 20:06:56 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2006-02-14 20:06:56 +0000
commit642b21c7546728f3a2e1505ee44f2e67fea7b05a (patch)
tree00e3a255e274d58273b953c54e9134baa2a3c593
parentf36d658e65650b4e9b76897353c446a14853d783 (diff)
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
-rw-r--r--src/modules/m_spanningtree.cpp10
-rw-r--r--src/socket.cpp6
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<std::string> params)
+ bool Error(std::deque<std::string> &params)
{
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 "";
}