From 61503a80476244a79bd3395733876cf5bc2c9aaf Mon Sep 17 00:00:00 2001 From: Felix Geyer Date: Mon, 20 Jul 2015 19:54:18 +0200 Subject: [PATCH] SymmetricCipherStream: Add error handling when reading from the device. --- src/streams/SymmetricCipherStream.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/streams/SymmetricCipherStream.cpp b/src/streams/SymmetricCipherStream.cpp index 84f8477a7..d230920f2 100644 --- a/src/streams/SymmetricCipherStream.cpp +++ b/src/streams/SymmetricCipherStream.cpp @@ -115,11 +115,25 @@ qint64 SymmetricCipherStream::readData(char* data, qint64 maxSize) bool SymmetricCipherStream::readBlock() { + QByteArray newData; + if (m_bufferFilling) { - m_buffer.append(m_baseDevice->read(m_cipher->blockSize() - m_buffer.size())); + newData.resize(m_cipher->blockSize() - m_buffer.size()); } else { - m_buffer = m_baseDevice->read(m_cipher->blockSize()); + m_buffer.clear(); + newData.resize(m_cipher->blockSize()); + } + + int readResult = m_baseDevice->read(newData.data(), newData.size()); + + if (readResult == -1) { + m_error = true; + setErrorString(m_baseDevice->errorString()); + return false; + } + else { + m_buffer.append(newData.left(readResult)); } if (m_buffer.size() != m_cipher->blockSize()) {