diff options
| author | Denis Dzyubenko <denis.dzyubenko@nokia.com> | 2012-04-11 15:59:00 +0200 |
|---|---|---|
| committer | Denis Dzyubenko <denis.dzyubenko@nokia.com> | 2012-04-11 16:54:46 +0200 |
| commit | 6b7df60a752422b1f6ff07bb2682c21e18a43985 (patch) | |
| tree | 3e56bd3f4ee34a228777d00ff328ef1c53cb1df1 /src/jsonstream/jsonstream.cpp | |
| parent | 20549eedb5b5e852c0e384cd76bfbff14168dbda (diff) | |
| parent | 7ef36e3c5a88560eb4e3a81c2c9f14059739108b (diff) | |
Merge remote-tracking branch 'gerrit/master' into hbtreehbtree
Conflicts:
src/daemon/daemon.pri
src/daemon/jsondbview.cpp
src/partition/jsondbindex.cpp
src/partition/jsondbindex.h
src/partition/jsondbindexquery.h
src/partition/jsondbmanagedbtree.cpp
src/partition/jsondbmanagedbtree.h
src/partition/jsondbmanagedbtreetxn.cpp
src/partition/jsondbmanagedbtreetxn.h
src/partition/jsondbobjecttable.cpp
src/partition/jsondbobjecttable.h
src/partition/jsondbpartition.cpp
src/partition/jsondbpartition.h
tests/auto/auto.pro
tests/auto/partition/testpartition.cpp
tests/benchmarks/benchmarks.pro
Change-Id: I963adefd6d32fca9b3537981306b67538c759034
Diffstat (limited to 'src/jsonstream/jsonstream.cpp')
| -rw-r--r-- | src/jsonstream/jsonstream.cpp | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/src/jsonstream/jsonstream.cpp b/src/jsonstream/jsonstream.cpp index f4d02d2..f45af5a 100644 --- a/src/jsonstream/jsonstream.cpp +++ b/src/jsonstream/jsonstream.cpp @@ -56,7 +56,7 @@ QT_BEGIN_NAMESPACE -namespace JsonStream { +namespace QtJsonDbJsonStream { JsonStream::JsonStream(QObject *parent) : QObject(parent), mDevice(0) @@ -110,6 +110,19 @@ bool JsonStream::send(const QJsonObject &object) void JsonStream::deviceReadyRead() { + struct JsonHeader + { + struct Header + { + unsigned int tag; + unsigned int version; + } h; + struct Base + { + unsigned int size; + } b; + }; + while (!mDevice->atEnd()) { int bytesAvailable = mDevice->bytesAvailable(); int offset = mReadBuffer.size(); @@ -119,12 +132,19 @@ void JsonStream::deviceReadyRead() qWarning() << "Error reading from socket" << mDevice->errorString(); continue; } - while (mReadBuffer.size()) { + while (mReadBuffer.size() > static_cast<int>(sizeof(JsonHeader))) { + JsonHeader header; + memcpy(&header, mReadBuffer.constData(), sizeof(header)); + if (header.h.tag != QJsonDocument::BinaryFormatTag || header.h.version != qToLittleEndian(1u)) { + mReadBuffer.clear(); + qWarning() << "Got invalid binary json data"; + break; + } QJsonDocument doc(QJsonDocument::fromBinaryData(mReadBuffer, QJsonDocument::Validate)); if (doc.isEmpty()) break; receive(doc.object()); - mReadBuffer = mReadBuffer.mid(doc.toBinaryData().size()); + mReadBuffer.remove(0, sizeof(header.h) + header.b.size); } } } @@ -138,7 +158,7 @@ void JsonStream::deviceBytesWritten(qint64 bytes) } } -} // namespace JsonStream +} // namespace QtJsonDbJsonStream QT_END_NAMESPACE |
