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;
}