From: Marcus Eggenberger Date: Mon, 14 Jul 2008 12:56:40 +0000 (+0200) Subject: limiting package size for the SignalProxy to 4MB X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=c1a0a99b2c03067a260fe16537d5d50d8131a193 limiting package size for the SignalProxy to 4MB --- diff --git a/src/common/signalproxy.cpp b/src/common/signalproxy.cpp index 22e71f13..0f383782 100644 --- a/src/common/signalproxy.cpp +++ b/src/common/signalproxy.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -901,7 +902,7 @@ void SignalProxy::dataAvailable() { void SignalProxy::writeDataToDevice(QIODevice *dev, const QVariant &item) { QAbstractSocket* sock = qobject_cast(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; } QByteArray block; @@ -922,6 +923,14 @@ bool SignalProxy::readDataFromDevice(QIODevice *dev, quint32 &blockSize, QVarian in >> blockSize; } + if(blockSize > 1 << 22) { + qWarning() << qPrintable(tr("Client tried to send package larger than max package size!")); + QAbstractSocket* sock = qobject_cast(dev); + qWarning() << qPrintable(tr("Disconnecting")) << (sock ? qPrintable(sock->peerAddress().toString()) : qPrintable(tr("local client"))); + dev->close(); + return false; + } + if(dev->bytesAvailable() < blockSize) return false; in >> item;