From 4779f692379430a925dbabc63a0ae8622c7e07d9 Mon Sep 17 00:00:00 2001 From: Kurt Pattyn Date: Sun, 3 Nov 2013 20:07:20 +0100 Subject: [PATCH] Remove memory access error Change-Id: I72d689c08b89be72e6bcb8171aa40812f3c77250 Reviewed-by: Kurt Pattyn --- src/websockets/qwebsocketprotocol_p.cpp | 18 ------------------ tests/auto/websocketprotocol/tst_websocketprotocol.cpp | 14 +++++++++----- 2 files changed, 9 insertions(+), 23 deletions(-) diff --git a/src/websockets/qwebsocketprotocol_p.cpp b/src/websockets/qwebsocketprotocol_p.cpp index 47ecc4a..b5c435e 100644 --- a/src/websockets/qwebsocketprotocol_p.cpp +++ b/src/websockets/qwebsocketprotocol_p.cpp @@ -165,24 +165,6 @@ void mask(QByteArray *payload, quint32 maskingKey) */ void mask(char *payload, quint64 size, quint32 maskingKey) { -/* quint32 *payloadData = reinterpret_cast(payload); - quint32 numIterations = static_cast(size / sizeof(quint32)); - quint32 remainder = size % sizeof(quint32); - const quint32 offset = numIterations * sizeof(quint32); - //maskingKey = qToBigEndian(maskingKey); - while (numIterations--) - { - *payloadData++ ^= maskingKey; - } - if (remainder) //remainder is < 4 - { - const char *mask = reinterpret_cast(&maskingKey); - payload += offset; - while (remainder--) - { - *payload++ ^= *mask++; - } - }*/ const quint8 mask[] = { static_cast((maskingKey & 0xFF000000u) >> 24), static_cast((maskingKey & 0x00FF0000u) >> 16), static_cast((maskingKey & 0x0000FF00u) >> 8), diff --git a/tests/auto/websocketprotocol/tst_websocketprotocol.cpp b/tests/auto/websocketprotocol/tst_websocketprotocol.cpp index ab39aa6..f088166 100644 --- a/tests/auto/websocketprotocol/tst_websocketprotocol.cpp +++ b/tests/auto/websocketprotocol/tst_websocketprotocol.cpp @@ -101,10 +101,7 @@ void tst_WebSocketProtocol::tst_validMasks_data() QTest::addColumn("inputdata"); QTest::addColumn("result"); - QTest::newRow("Empty payload") << qToBigEndian(0x12345678u) << QString("") << QByteArray(""); -// QTest::newRow("ASCII payload of 8 characters") << qToBigEndian(0x12345678u) << QString("abcdefgh") << QByteArray("\x19\x34\x57\x76\x1D\x30\x53\x7A"); -// QTest::newRow("ASCII payload of 9 characters") << qToBigEndian(0x12345678u) << QString("abcdefghi") << QByteArray("\x19\x34\x57\x76\x1D\x30\x53\x7A\x11"); -// QTest::newRow("UTF-8 payload") << qToBigEndian(0x12345678u) << QString("∫∂ƒ©øØ") << QByteArray("\x47\x69\x0B\xBB\x80\x8E"); + QTest::newRow("Empty payload") << 0x12345678u << QString("") << QByteArray(""); QTest::newRow("ASCII payload of 8 characters") << 0x12345678u << QString("abcdefgh") << QByteArray("\x73\x56\x35\x1C\x77\x52\x31\x10"); QTest::newRow("ASCII payload of 9 characters") << 0x12345678u << QString("abcdefghi") << QByteArray("\x73\x56\x35\x1C\x77\x52\x31\x10\x7B"); QTest::newRow("UTF-8 payload") << 0x12345678u << QString("∫∂ƒ©øØ") << QByteArray("\x2D\x0B\x69\xD1\xEA\xEC"); @@ -116,7 +113,14 @@ void tst_WebSocketProtocol::tst_validMasks() QFETCH(QString, inputdata); QFETCH(QByteArray, result); - char *data = inputdata.toLatin1().data(); + //put latin1 into an explicit array + //otherwise, the intermediate object is deleted and the data pointer becomes invalid + QByteArray latin1 = inputdata.toLatin1(); + char *data = latin1.data(); + //char *data = inputdata.toLatin1().data(); + + qDebug() << hex << mask; + qDebug() << QByteArray(data, inputdata.size()).toHex(); QWebSocketProtocol::mask(data, inputdata.size(), mask); QCOMPARE(QByteArray::fromRawData(data, inputdata.size()), result); -- 2.7.4