You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ab...@apache.org on 2020/03/11 12:41:27 UTC

[nifi-minifi-cpp] 02/02: CRC Stream crash fix in case of unsuccessful read/write

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 <ab...@apache.org>
AuthorDate: Tue Mar 3 17:03:57 2020 +0100

    CRC Stream crash fix in case of unsuccessful read/write
    
    Signed-off-by: Arpad Boda <ab...@apache.org>
    
    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;
 }