summaryrefslogtreecommitdiffstats
path: root/src/corelib/io
diff options
context:
space:
mode:
authorAlex Trotsenko <alex1973tr@gmail.com>2016-06-14 18:51:02 +0300
committerAlex Trotsenko <alex1973tr@gmail.com>2016-06-15 07:43:54 +0000
commit3c87c82e52055bcd6216ccd622ae20ce528433f5 (patch)
treefbd25f396b15f1520c749871631f04105f1a76bc /src/corelib/io
parent49491dd678071661db2e34133c051cb176a83e0b (diff)
QDataStream: do not lose error status while reading containers
Otherwise, the code: ds >> s >> hash; could set the stream status to ReadPastEnd, while deserialization of the string is failed with ReadCorruptData status. Proposed solution is to restore a previously latched error status unconditionally in accordance with QDataStream::setStatus() docs. Change-Id: Id3a7dccf709b02e5b018efb48d7647ee48fe5124 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'src/corelib/io')
-rw-r--r--src/corelib/io/qdatastream.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/corelib/io/qdatastream.h b/src/corelib/io/qdatastream.h
index e4cd3b3509..e0a9cccdad 100644
--- a/src/corelib/io/qdatastream.h
+++ b/src/corelib/io/qdatastream.h
@@ -363,8 +363,10 @@ Q_OUTOFLINE_TEMPLATE QDataStream &operator>>(QDataStream &in, QHash<Key, T> &has
if (in.status() != QDataStream::Ok)
hash.clear();
- if (oldStatus != QDataStream::Ok)
+ if (oldStatus != QDataStream::Ok) {
+ in.resetStatus();
in.setStatus(oldStatus);
+ }
return in;
}
@@ -407,8 +409,10 @@ Q_OUTOFLINE_TEMPLATE QDataStream &operator>>(QDataStream &in, QMap<aKey, aT> &ma
}
if (in.status() != QDataStream::Ok)
map.clear();
- if (oldStatus != QDataStream::Ok)
+ if (oldStatus != QDataStream::Ok) {
+ in.resetStatus();
in.setStatus(oldStatus);
+ }
return in;
}