CRC Stream crash fix in case of unsuccessful read/write

Signed-off-by: Arpad Boda <aboda@apache.org>

Approved by bakaid and szaszm on GH
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 @@
 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 @@
 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 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;
 }