Remove memory access error
authorKurt Pattyn <pattyn.kurt@gmail.com>
Sun, 3 Nov 2013 19:07:20 +0000 (20:07 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Sun, 3 Nov 2013 19:08:13 +0000 (20:08 +0100)
Change-Id: I72d689c08b89be72e6bcb8171aa40812f3c77250
Reviewed-by: Kurt Pattyn <pattyn.kurt@gmail.com>
src/websockets/qwebsocketprotocol_p.cpp
tests/auto/websocketprotocol/tst_websocketprotocol.cpp

index 47ecc4a..b5c435e 100644 (file)
@@ -165,24 +165,6 @@ void mask(QByteArray *payload, quint32 maskingKey)
     */
 void mask(char *payload, quint64 size, quint32 maskingKey)
 {
-/*    quint32 *payloadData = reinterpret_cast<quint32 *>(payload);
-    quint32 numIterations = static_cast<quint32>(size / sizeof(quint32));
-    quint32 remainder = size % sizeof(quint32);
-    const quint32 offset = numIterations * sizeof(quint32);
-    //maskingKey = qToBigEndian<quint32>(maskingKey);
-    while (numIterations--)
-    {
-        *payloadData++ ^= maskingKey;
-    }
-    if (remainder)  //remainder is < 4
-    {
-        const char *mask = reinterpret_cast<const char *>(&maskingKey);
-        payload += offset;
-        while (remainder--)
-        {
-            *payload++ ^= *mask++;
-        }
-    }*/
     const quint8 mask[] = { static_cast<quint8>((maskingKey & 0xFF000000u) >> 24),
                             static_cast<quint8>((maskingKey & 0x00FF0000u) >> 16),
                             static_cast<quint8>((maskingKey & 0x0000FF00u) >> 8),
index ab39aa6..f088166 100644 (file)
@@ -101,10 +101,7 @@ void tst_WebSocketProtocol::tst_validMasks_data()
     QTest::addColumn<QString>("inputdata");
     QTest::addColumn<QByteArray>("result");
 
-    QTest::newRow("Empty payload") << qToBigEndian<quint32>(0x12345678u) << QString("") << QByteArray("");
-//    QTest::newRow("ASCII payload of 8 characters") << qToBigEndian<quint32>(0x12345678u) << QString("abcdefgh") << QByteArray("\x19\x34\x57\x76\x1D\x30\x53\x7A");
-//    QTest::newRow("ASCII payload of 9 characters") << qToBigEndian<quint32>(0x12345678u) << QString("abcdefghi") << QByteArray("\x19\x34\x57\x76\x1D\x30\x53\x7A\x11");
-//    QTest::newRow("UTF-8 payload") << qToBigEndian<quint32>(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);