X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcommon%2Fsignalproxy.cpp;h=0f383782c44033b6a36adaed4f56fa175113f9b7;hb=be9f2b864dea628bc0c1fbc9b52acbf45b775dc8;hp=22e71f135323e12e4e8d92d0d5e2a022f708d32f;hpb=444e91f948b435e652205c4d0f1148906e9e86dc;p=quassel.git 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;