aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2018-06-25 09:53:01 +0200
committerLiang Qi <liang.qi@qt.io>2018-06-25 12:15:55 +0200
commitfbf6f7400a5b5ae10267171e201391ce1ff8eb96 (patch)
tree18e22092c2764fea16442fd814f230d4fe095a49 /src/plugins
parentc21a6a9f2c2d635aca3bf88a6431c560b16b1cc6 (diff)
parent9999591e69a0908cd3fbe14646fb98881e32061b (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.cpp21
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))) {