diff --git a/src/core/changerecorder_p.h b/src/core/changerecorder_p.h --- a/src/core/changerecorder_p.h +++ b/src/core/changerecorder_p.h @@ -51,7 +51,7 @@ QString notificationsFileName() const; void loadNotifications(); - QQueue loadFrom(QIODevice *device, bool &needsFullSave) const; + QQueue loadFrom(QFile *device, bool &needsFullSave) const; QString dumpNotificationListToString() const; void addToStream(QDataStream &stream, const Protocol::ChangeNotification &msg); void saveNotifications(); diff --git a/src/core/changerecorder_p.cpp b/src/core/changerecorder_p.cpp --- a/src/core/changerecorder_p.cpp +++ b/src/core/changerecorder_p.cpp @@ -131,7 +131,7 @@ static const quint64 s_versionMask = Q_UINT64_C(0xFFFF00000000); static const quint64 s_sizeMask = Q_UINT64_C(0x0000FFFFFFFF); -QQueue ChangeRecorderPrivate::loadFrom(QIODevice *device, bool &needsFullSave) const +QQueue ChangeRecorderPrivate::loadFrom(QFile *device, bool &needsFullSave) const { QDataStream stream(device); stream.setVersion(QDataStream::Qt_4_6); @@ -161,6 +161,11 @@ stream >> sessionId; stream >> type; + if (stream.status() != QDataStream::Ok) { + qWarning() << "Error reading saved notifications! Aborting. Corrupt file:" << device->fileName(); + break; + } + switch (static_cast(type)) { case Item: msg = loadItemNotification(stream, version); @@ -463,6 +468,10 @@ stream >> remoteId; stream >> remoteRevision; stream >> mimeType; + if (stream.status() != QDataStream::Ok) { + qWarning() << "Error reading saved notifications! Aborting"; + return msg; + } msg.addItem(uid, remoteId, remoteRevision, mimeType); } stream >> resource; @@ -558,6 +567,10 @@ stream >> remoteId; stream >> remoteRevision; stream >> dummyString; + if (stream.status() != QDataStream::Ok) { + qWarning() << "Error reading saved notifications! Aborting"; + return msg; + } msg.setId(uid); msg.setRemoteId(remoteId); msg.setRemoteRevision(remoteRevision); @@ -637,6 +650,10 @@ stream >> remoteId; stream >> dummyString; stream >> dummyString; + if (stream.status() != QDataStream::Ok) { + qWarning() << "Error reading saved notifications! Aborting"; + return msg; + } msg.setId(uid); msg.setRemoteId(remoteId); } @@ -702,6 +719,10 @@ stream >> dummyString; stream >> dummyString; stream >> dummyString; + if (stream.status() != QDataStream::Ok) { + qWarning() << "Error reading saved notifications! Aborting"; + return msg; + } } stream >> dummyBa; stream >> dummyBa;