limiting package size for the SignalProxy to 4MB
authorMarcus Eggenberger <egs@quassel-irc.org>
Mon, 14 Jul 2008 12:56:40 +0000 (14:56 +0200)
committerMarcus Eggenberger <egs@quassel-irc.org>
Mon, 14 Jul 2008 12:57:03 +0000 (14:57 +0200)
src/common/signalproxy.cpp

index 76fccb7..2039208 100644 (file)
@@ -23,6 +23,7 @@
 #include <QObject>
 #include <QIODevice>
 #include <QAbstractSocket>
 #include <QObject>
 #include <QIODevice>
 #include <QAbstractSocket>
+#include <QHostAddress>
 #include <QHash>
 #include <QMultiHash>
 #include <QList>
 #include <QHash>
 #include <QMultiHash>
 #include <QList>
@@ -911,7 +912,7 @@ void SignalProxy::dataAvailable() {
 void SignalProxy::writeDataToDevice(QIODevice *dev, const QVariant &item, bool compressed) {
   QAbstractSocket* sock  = qobject_cast<QAbstractSocket*>(dev);
   if(!dev->isOpen() || (sock && sock->state()!=QAbstractSocket::ConnectedState)) {
 void SignalProxy::writeDataToDevice(QIODevice *dev, const QVariant &item, bool compressed) {
   QAbstractSocket* sock  = qobject_cast<QAbstractSocket*>(dev);
   if(!dev->isOpen() || (sock && sock->state()!=QAbstractSocket::ConnectedState)) {
-    qWarning("SignalProxy: Can't call on a closed device");
+    qWarning("SignalProxy: Can't call write on a closed device");
     return;
   }
 
     return;
   }
 
@@ -949,6 +950,14 @@ bool SignalProxy::readDataFromDevice(QIODevice *dev, quint32 &blockSize, QVarian
     in >> blockSize;
   }
 
     in >> blockSize;
   }
 
+  if(blockSize > 1 << 22) {
+    qWarning() << qPrintable(tr("Client tried to send package larger than max package size!"));
+    QAbstractSocket* sock  = qobject_cast<QAbstractSocket*>(dev);
+    qWarning() << qPrintable(tr("Disconnecting")) << (sock ? qPrintable(sock->peerAddress().toString()) : qPrintable(tr("local client")));
+    dev->close();
+    return false;
+  }
+    
   if(dev->bytesAvailable() < blockSize)
     return false;
 
   if(dev->bytesAvailable() < blockSize)
     return false;