Don't push unnecessary data to a data stream for QVariant()
authorThiago Macieira <thiago.macieira@intel.com>
Fri, 20 Apr 2012 14:52:45 +0000 (16:52 +0200)
committerQt by Nokia <qt-info@nokia.com>
Fri, 20 Apr 2012 20:23:23 +0000 (22:23 +0200)
Adjust the test because we don't read past the end anymore.

Task-number: QTBUG-25108
Change-Id: I8243f1d5ae79d1256aab2cb1132598a716a7eeeb
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
src/corelib/io/qdatastream.cpp
src/corelib/kernel/qvariant.cpp
tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp

index 559c5a0..0a49189 100644 (file)
@@ -253,9 +253,6 @@ enum {
     DefaultStreamVersion = QDataStream::Qt_5_0
 };
 
-// ### 5.0: when streaming invalid QVariants, just the type should
-// be written, no "data" after it
-
 /*!
     Constructs a data stream that has no I/O device.
 
index c363be8..18bef1b 100644 (file)
@@ -1705,9 +1705,11 @@ void QVariant::load(QDataStream &s)
     d.is_null = is_null;
 
     if (!isValid()) {
+        if (s.version() < QDataStream::Qt_5_0) {
         // Since we wrote something, we should read something
-        QString x;
-        s >> x;
+            QString x;
+            s >> x;
+        }
         d.is_null = true;
         return;
     }
@@ -1769,7 +1771,8 @@ void QVariant::save(QDataStream &s) const
     }
 
     if (!isValid()) {
-        s << QString();
+        if (s.version() < QDataStream::Qt_5_0)
+            s << QString();
         return;
     }
 
index 91b56e4..dca2ee3 100644 (file)
@@ -2901,13 +2901,13 @@ void tst_QVariant::loadUnknownUserType()
 
 void tst_QVariant::loadBrokenUserType()
 {
-    char data[] = {0, 0, 0, 127, 0, 112 };
+    char data[] = {0, 0, 0, 127, 0 };
 
     QByteArray ba(data, sizeof(data));
     QDataStream ds(&ba, QIODevice::ReadOnly);
     QVariant var;
     var.load(ds);
-    QCOMPARE(ds.status(), QDataStream::ReadPastEnd);
+    QCOMPARE(ds.status(), QDataStream::Ok);
 }
 
 void tst_QVariant::invalidDate() const