diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2018-06-25 09:53:01 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2018-06-25 12:15:55 +0200 |
commit | fbf6f7400a5b5ae10267171e201391ce1ff8eb96 (patch) | |
tree | 18e22092c2764fea16442fd814f230d4fe095a49 /src/plugins | |
parent | c21a6a9f2c2d635aca3bf88a6431c560b16b1cc6 (diff) | |
parent | 9999591e69a0908cd3fbe14646fb98881e32061b (diff) |
Merge remote-tracking branch 'origin/5.11' into dev
Conflicts:
src/plugins/qmltooling/packetprotocol/qpacketprotocol.cpp
src/quick/handlers/qquickhandlerpoint.cpp
src/quick/handlers/qquicksinglepointhandler.cpp
tests/auto/qml/ecmascripttests/test262
Change-Id: I8908ec8c6116ca626fbd269af7625d4c429429ca
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/qmltooling/packetprotocol/qpacketprotocol.cpp | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/plugins/qmltooling/packetprotocol/qpacketprotocol.cpp b/src/plugins/qmltooling/packetprotocol/qpacketprotocol.cpp index c736b6414d..c256501301 100644 --- a/src/plugins/qmltooling/packetprotocol/qpacketprotocol.cpp +++ b/src/plugins/qmltooling/packetprotocol/qpacketprotocol.cpp @@ -40,6 +40,8 @@ #include "qpacketprotocol_p.h" #include <QtCore/QElapsedTimer> +#include <QtCore/QtEndian> + #include <private/qiodevice_p.h> #include <private/qobject_p.h> @@ -107,7 +109,7 @@ public: bool writeToDevice(const char *bytes, qint64 size); bool readFromDevice(char *buffer, qint64 size); - QList<qint64> sendingPackets; + QList<qint32> sendingPackets; QList<QByteArray> packets; QByteArray inProgress; qint32 inProgressSize; @@ -138,16 +140,23 @@ QPacketProtocol::QPacketProtocol(QIODevice *dev, QObject *parent) void QPacketProtocol::send(const QByteArray &data) { Q_D(QPacketProtocol); + static const qint32 maxSize = std::numeric_limits<qint32>::max() - sizeof(qint32); if (data.isEmpty()) return; // We don't send empty packets - const qint32 sendSize = data.size() + static_cast<qint32>(sizeof(qint32)); + if (data.size() > maxSize) { + emit error(); + return; + } + + const qint32 sendSize = data.size() + static_cast<qint32>(sizeof(qint32)); d->sendingPackets.append(sendSize); - if (!d->writeToDevice((const char *)&sendSize, sizeof(qint32)) + + qint32 sendSizeLE = qToLittleEndian(sendSize); + if (!d->writeToDevice((const char *)&sendSizeLE, sizeof(qint32)) || !d->writeToDevice(data.data(), data.size())) { emit error(); - return; } } @@ -238,10 +247,12 @@ void QPacketProtocol::readyToRead() return; // Read size header - if (!d->readFromDevice((char *)&d->inProgressSize, sizeof(qint32))) { + qint32 inProgressSizeLE; + if (!d->readFromDevice((char *)&inProgressSizeLE, sizeof(qint32))) { emit error(); return; } + d->inProgressSize = qFromLittleEndian(inProgressSizeLE); // Check sizing constraints if (d->inProgressSize < qint32(sizeof(qint32))) { |