This is an automated email from the ASF dual-hosted git repository. aboda pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit d7ff07e50db98160e35501c1bbea944deeb4bdea Author: Arpad Boda <[email protected]> AuthorDate: Tue Mar 3 17:03:57 2020 +0100 CRC Stream crash fix in case of unsuccessful read/write Signed-off-by: Arpad Boda <[email protected]> Approved by bakaid and szaszm on GH --- libminifi/include/io/CRCStream.h | 8 ++++++-- nanofi/include/sitetosite/CSiteToSite.h | 8 ++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/libminifi/include/io/CRCStream.h b/libminifi/include/io/CRCStream.h index 95e3a11..2c7f3d5 100644 --- a/libminifi/include/io/CRCStream.h +++ b/libminifi/include/io/CRCStream.h @@ -189,7 +189,9 @@ int CRCStream<T>::readData(std::vector<uint8_t> &buf, int buflen) { template<typename T> int CRCStream<T>::readData(uint8_t *buf, int buflen) { int ret = child_stream_->read(buf, buflen); - crc_ = crc32(crc_, buf, ret); + if (ret > 0) { + crc_ = crc32(crc_, buf, ret); + } return ret; } @@ -205,7 +207,9 @@ template<typename T> int CRCStream<T>::writeData(uint8_t *value, int size) { int ret = child_stream_->write(value, size); - crc_ = crc32(crc_, value, size); + if (ret > 0) { + crc_ = crc32(crc_, value, ret); + } return ret; } diff --git a/nanofi/include/sitetosite/CSiteToSite.h b/nanofi/include/sitetosite/CSiteToSite.h index 0569f04..a35b3c5 100644 --- a/nanofi/include/sitetosite/CSiteToSite.h +++ b/nanofi/include/sitetosite/CSiteToSite.h @@ -324,14 +324,18 @@ static void updateCRC(CTransaction * transaction, const uint8_t *buffer, uint32_ static int writeData(CTransaction * transaction, const uint8_t *value, int size) { int ret = write_buffer(value, size, transaction->_stream); - transaction->_crc = crc32(transaction->_crc, value, size); + if (ret > 0) { + transaction->_crc = crc32(transaction->_crc, value, ret); + } return ret; } static int readData(CTransaction * transaction, uint8_t *buf, int buflen) { //int ret = transaction->_stream->read(buf, buflen); int ret = read_buffer(buf, buflen, transaction->_stream); - transaction->_crc = crc32(transaction->_crc, buf, ret); + if (ret > 0) { + transaction->_crc = crc32(transaction->_crc, buf, ret); + } return ret; }
