This is an automated email from the ASF dual-hosted git repository.
aboda pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
The following commit(s) were added to refs/heads/main by this push:
new b9c0720 MINIFICPP-1443 Fix 'possible loss of data' warnings
b9c0720 is described below
commit b9c0720568545c7dc8629f7454a4d8ad22820a52
Author: Ferenc Gerlits <[email protected]>
AuthorDate: Mon Dec 14 11:40:46 2020 +0100
MINIFICPP-1443 Fix 'possible loss of data' warnings
... and a few others which were related or nearby in the code.
Signed-off-by: Arpad Boda <[email protected]>
This closes #964
---
controller/Controller.h | 15 +++---
extensions/civetweb/processors/ListenHTTP.cpp | 4 +-
extensions/http-curl/client/HTTPClient.cpp | 7 ++-
extensions/http-curl/client/HTTPStream.cpp | 4 +-
extensions/http-curl/processors/InvokeHTTP.cpp | 3 +-
extensions/http-curl/protocols/AgentPrinter.cpp | 5 +-
extensions/http-curl/sitetosite/HTTPProtocol.cpp | 10 ++--
extensions/http-curl/tests/C2UpdateAgentTest.cpp | 3 +-
extensions/http-curl/tests/C2UpdateTest.cpp | 3 +-
extensions/http-curl/tests/HTTPHandlers.h | 3 +-
extensions/http-curl/tests/HTTPIntegrationBase.h | 2 +-
.../http-curl/tests/unit/InvokeHTTPTests.cpp | 3 +-
extensions/libarchive/ArchiveMetadata.cpp | 11 ++--
extensions/libarchive/BinFiles.h | 3 +-
extensions/libarchive/CompressContent.h | 17 +++---
extensions/libarchive/MergeContent.h | 11 ++--
extensions/libarchive/UnfocusArchiveEntry.cpp | 3 +-
extensions/librdkafka/PublishKafka.cpp | 3 +-
.../rocksdb-repos/DatabaseContentRepository.cpp | 7 ++-
extensions/rocksdb-repos/FlowFileRepository.cpp | 15 +++---
.../processors/GenerateFlowFile.cpp | 6 ++-
.../processors/GenerateFlowFile.h | 3 +-
extensions/standard-processors/processors/GetTCP.h | 3 +-
.../standard-processors/processors/LogAttribute.h | 3 +-
.../standard-processors/tests/unit/GetTCPTests.cpp | 7 +--
.../CollectorInitiatedSubscription.cpp | 2 +-
.../windows-event-log/ConsumeWindowsEventLog.cpp | 2 +-
.../windows-event-log/tests/BookmarkTests.cpp | 2 +-
libminifi/include/FlowControlProtocol.h | 5 +-
libminifi/include/agent/build_description.h | 2 +-
libminifi/include/c2/PayloadSerializer.h | 14 ++---
.../core/repository/VolatileFlowFileRepository.h | 4 +-
.../include/core/state/nodes/AgentInformation.h | 2 +-
libminifi/include/io/AtomicEntryStream.h | 5 +-
libminifi/include/io/BufferStream.h | 3 +-
libminifi/include/provenance/Provenance.h | 8 +--
libminifi/include/utils/HTTPClient.h | 3 +-
libminifi/include/utils/StringUtils.h | 9 ++--
libminifi/include/utils/file/FileUtils.h | 3 +-
libminifi/src/FlowControlProtocol.cpp | 4 +-
libminifi/src/FlowFileRecord.cpp | 5 +-
libminifi/src/c2/C2Agent.cpp | 10 ++--
libminifi/src/c2/ControllerSocketProtocol.cpp | 11 ++--
libminifi/src/c2/protocols/RESTProtocol.cpp | 13 ++---
.../controllers/LinuxPowerManagementService.cpp | 3 +-
libminifi/src/core/ContentSession.cpp | 11 ++--
libminifi/src/core/ProcessSession.cpp | 14 ++---
.../SiteToSiteProvenanceReportingTask.cpp | 27 +++++-----
libminifi/src/core/yaml/YamlConfiguration.cpp | 6 +--
libminifi/src/io/BufferStream.cpp | 5 +-
libminifi/src/io/InputStream.cpp | 6 ++-
libminifi/src/io/OutputStream.cpp | 7 +--
libminifi/src/io/ZlibStream.cpp | 10 ++--
libminifi/src/provenance/Provenance.cpp | 17 +++---
.../src/serialization/FlowFileV3Serializer.cpp | 5 +-
libminifi/src/sitetosite/RawSocketProtocol.cpp | 3 +-
libminifi/src/sitetosite/SiteToSiteClient.cpp | 8 ++-
libminifi/src/utils/ByteArrayCallback.cpp | 8 ++-
libminifi/src/utils/Environment.cpp | 6 ++-
libminifi/src/utils/StringUtils.cpp | 31 ++++++-----
libminifi/src/utils/file/PathUtils.cpp | 2 +-
libminifi/src/utils/tls/TLSUtils.cpp | 3 +-
libminifi/test/BufferReader.h | 3 +-
libminifi/test/archive-tests/MergeFileTests.cpp | 7 +--
libminifi/test/archive-tests/util/ArchiveTests.cpp | 13 ++---
.../test/persistence-tests/PersistenceTests.cpp | 5 +-
.../test/rocksdb-tests/ContentSessionTests.cpp | 4 +-
libminifi/test/rocksdb-tests/RepoTests.cpp | 3 +-
libminifi/test/unit/CRCTests.cpp | 13 ++---
libminifi/test/unit/EncryptionUtilsTests.cpp | 2 +-
libminifi/test/unit/FileStreamTests.cpp | 21 ++++----
libminifi/test/unit/FlowFileSerializationTests.cpp | 9 ++--
libminifi/test/unit/LoggerConfigurationTests.cpp | 3 +-
libminifi/test/unit/MinifiConcurrentQueueTests.cpp | 3 +-
libminifi/test/unit/SiteToSiteHelper.h | 4 +-
libminifi/test/unit/StringUtilsTests.cpp | 62 ++++++----------------
libminifi/test/unit/ZlibStreamTests.cpp | 28 ++++++----
main/AgentDocs.cpp | 10 ++--
nanofi/include/sitetosite/CPeer.h | 4 +-
nanofi/tests/CTestsBase.h | 3 +-
80 files changed, 350 insertions(+), 280 deletions(-)
diff --git a/controller/Controller.h b/controller/Controller.h
index 6b93173..a029109 100644
--- a/controller/Controller.h
+++ b/controller/Controller.h
@@ -22,6 +22,7 @@
#include "core/ConfigurationFactory.h"
#include "io/ClientSocket.h"
#include "c2/ControllerSocketProtocol.h"
+#include "utils/gsl.h"
/**
* Sends a single argument comment
@@ -35,7 +36,7 @@ bool sendSingleCommand(std::unique_ptr<minifi::io::Socket>
socket, uint8_t op, c
minifi::io::BufferStream stream;
stream.write(&op, 1);
stream.write(value);
- return socket->write(const_cast<uint8_t*>(stream.getBuffer()),
stream.size()) == stream.size();
+ return socket->write(const_cast<uint8_t*>(stream.getBuffer()),
gsl::narrow<int>(stream.size())) == stream.size();
}
/**
@@ -76,7 +77,7 @@ int updateFlow(std::unique_ptr<minifi::io::Socket> socket,
std::ostream &out, st
stream.write(&op, 1);
stream.write("flow");
stream.write(file);
- if (socket->write(const_cast<uint8_t*>(stream.getBuffer()), stream.size()) <
0) {
+ if (socket->write(const_cast<uint8_t*>(stream.getBuffer()),
gsl::narrow<int>(stream.size())) < 0) {
return -1;
}
// read the response
@@ -106,7 +107,7 @@ int getFullConnections(std::unique_ptr<minifi::io::Socket>
socket, std::ostream
minifi::io::BufferStream stream;
stream.write(&op, 1);
stream.write("getfull");
- if (socket->write(const_cast<uint8_t*>(stream.getBuffer()), stream.size()) <
0) {
+ if (socket->write(const_cast<uint8_t*>(stream.getBuffer()),
gsl::narrow<int>(stream.size())) < 0) {
return -1;
}
// read the response
@@ -132,7 +133,7 @@ int getJstacks(std::unique_ptr<minifi::io::Socket> socket,
std::ostream &out) {
minifi::io::BufferStream stream;
stream.write(&op, 1);
stream.write("jstack");
- if (socket->write(const_cast<uint8_t*>(stream.getBuffer()), stream.size()) <
0) {
+ if (socket->write(const_cast<uint8_t*>(stream.getBuffer()),
gsl::narrow<int>(stream.size())) < 0) {
return -1;
}
// read the response
@@ -172,7 +173,7 @@ int getConnectionSize(std::unique_ptr<minifi::io::Socket>
socket, std::ostream &
stream.write(&op, 1);
stream.write("queue");
stream.write(connection);
- if (socket->write(const_cast<uint8_t*>(stream.getBuffer()), stream.size()) <
0) {
+ if (socket->write(const_cast<uint8_t*>(stream.getBuffer()),
gsl::narrow<int>(stream.size())) < 0) {
return -1;
}
// read the response
@@ -192,7 +193,7 @@ int listComponents(std::unique_ptr<minifi::io::Socket>
socket, std::ostream &out
uint8_t op = minifi::c2::Operation::DESCRIBE;
stream.write(&op, 1);
stream.write("components");
- if (socket->write(const_cast<uint8_t*>(stream.getBuffer()), stream.size()) <
0) {
+ if (socket->write(const_cast<uint8_t*>(stream.getBuffer()),
gsl::narrow<int>(stream.size())) < 0) {
return -1;
}
uint16_t responses = 0;
@@ -216,7 +217,7 @@ int listConnections(std::unique_ptr<minifi::io::Socket>
socket, std::ostream &ou
uint8_t op = minifi::c2::Operation::DESCRIBE;
stream.write(&op, 1);
stream.write("connections");
- if (socket->write(const_cast<uint8_t*>(stream.getBuffer()), stream.size()) <
0) {
+ if (socket->write(const_cast<uint8_t*>(stream.getBuffer()),
gsl::narrow<int>(stream.size())) < 0) {
return -1;
}
uint16_t responses = 0;
diff --git a/extensions/civetweb/processors/ListenHTTP.cpp
b/extensions/civetweb/processors/ListenHTTP.cpp
index 86dc62d..7a2b072 100644
--- a/extensions/civetweb/processors/ListenHTTP.cpp
+++ b/extensions/civetweb/processors/ListenHTTP.cpp
@@ -20,6 +20,8 @@
*/
#include "ListenHTTP.h"
+#include "utils/gsl.h"
+
namespace org {
namespace apache {
namespace nifi {
@@ -504,7 +506,7 @@
ListenHTTP::WriteCallback::WriteCallback(std::unique_ptr<io::BufferStream> reque
}
int64_t ListenHTTP::WriteCallback::process(const
std::shared_ptr<io::BaseStream>& stream) {
- return stream->write(const_cast<uint8_t*>(request_content_->getBuffer()),
request_content_->size());
+ return stream->write(const_cast<uint8_t*>(request_content_->getBuffer()),
gsl::narrow<int>(request_content_->size()));
}
bool ListenHTTP::isSecure() const {
diff --git a/extensions/http-curl/client/HTTPClient.cpp
b/extensions/http-curl/client/HTTPClient.cpp
index 2c4384b..f628b4f 100644
--- a/extensions/http-curl/client/HTTPClient.cpp
+++ b/extensions/http-curl/client/HTTPClient.cpp
@@ -16,7 +16,7 @@
* limitations under the License.
*/
#include "HTTPClient.h"
-#include "Exception.h"
+
#include <memory>
#include <climits>
#include <cinttypes>
@@ -24,6 +24,9 @@
#include <vector>
#include <string>
#include <algorithm>
+
+#include "Exception.h"
+#include "utils/gsl.h"
#include "utils/StringUtils.h"
#include "utils/RegexUtils.h"
@@ -213,7 +216,7 @@ void HTTPClient::setContentType(std::string content_type) {
}
std::string HTTPClient::escape(std::string string_to_escape) {
- return curl_easy_escape(http_session_, string_to_escape.c_str(),
string_to_escape.length());
+ return curl_easy_escape(http_session_, string_to_escape.c_str(),
gsl::narrow<int>(string_to_escape.length()));
}
void HTTPClient::setPostFields(const std::string& input) {
diff --git a/extensions/http-curl/client/HTTPStream.cpp
b/extensions/http-curl/client/HTTPStream.cpp
index eb3b633..5ba7f3f 100644
--- a/extensions/http-curl/client/HTTPStream.cpp
+++ b/extensions/http-curl/client/HTTPStream.cpp
@@ -27,6 +27,8 @@
#include "HTTPCallback.h"
#include "io/validation.h"
+#include "utils/gsl.h"
+
namespace org {
namespace apache {
namespace nifi {
@@ -95,7 +97,7 @@ int HttpStream::read(uint8_t *buf, int buflen) {
started_ = true;
}
}
- return http_read_callback_.readFully((char*) buf, buflen);
+ return gsl::narrow<int>(http_read_callback_.readFully((char*) buf,
buflen));
} else {
return -1;
diff --git a/extensions/http-curl/processors/InvokeHTTP.cpp
b/extensions/http-curl/processors/InvokeHTTP.cpp
index 8b173fb..c0b2b87 100644
--- a/extensions/http-curl/processors/InvokeHTTP.cpp
+++ b/extensions/http-curl/processors/InvokeHTTP.cpp
@@ -45,6 +45,7 @@
#include "io/BufferStream.h"
#include "io/StreamFactory.h"
#include "ResourceClaim.h"
+#include "utils/gsl.h"
#include "utils/StringUtils.h"
namespace org {
@@ -382,7 +383,7 @@ void InvokeHTTP::onTrigger(const
std::shared_ptr<core::ProcessContext> &context,
response_flow->addAttribute(STATUS_MESSAGE, response_headers.at(0));
response_flow->addAttribute(REQUEST_URL, url);
response_flow->addAttribute(TRANSACTION_ID, tx_id);
- io::BufferStream stream((const uint8_t*) response_body.data(),
response_body.size());
+ io::BufferStream stream((const uint8_t*) response_body.data(),
gsl::narrow<unsigned int>(response_body.size()));
// need an import from the data stream.
session->importFrom(stream, response_flow);
}
diff --git a/extensions/http-curl/protocols/AgentPrinter.cpp
b/extensions/http-curl/protocols/AgentPrinter.cpp
index 672652a..58b567f 100644
--- a/extensions/http-curl/protocols/AgentPrinter.cpp
+++ b/extensions/http-curl/protocols/AgentPrinter.cpp
@@ -17,6 +17,7 @@
*/
#include "AgentPrinter.h"
+
#include <algorithm>
#include <memory>
#include <utility>
@@ -25,6 +26,8 @@
#include <string>
#include <vector>
+#include "utils/gsl.h"
+
namespace org {
namespace apache {
namespace nifi {
@@ -51,7 +54,7 @@ std::string AgentPrinter::serializeJsonRootPayload(const
C2Payload& payload) {
rapidjson::Value opReqStrVal;
std::string operation_request_str = getOperation(payload);
- opReqStrVal.SetString(operation_request_str.c_str(),
operation_request_str.length(), alloc);
+ opReqStrVal.SetString(operation_request_str.c_str(),
gsl::narrow<rapidjson::SizeType>(operation_request_str.length()), alloc);
json_payload.AddMember("operation", opReqStrVal, alloc);
std::string operationid = payload.getIdentifier();
diff --git a/extensions/http-curl/sitetosite/HTTPProtocol.cpp
b/extensions/http-curl/sitetosite/HTTPProtocol.cpp
index 50cdca8..827c640 100644
--- a/extensions/http-curl/sitetosite/HTTPProtocol.cpp
+++ b/extensions/http-curl/sitetosite/HTTPProtocol.cpp
@@ -41,12 +41,12 @@ namespace sitetosite {
std::shared_ptr<utils::IdGenerator> HttpSiteToSiteClient::id_generator_ =
utils::IdGenerator::getIdGenerator();
utils::optional<utils::Identifier>
HttpSiteToSiteClient::parseTransactionId(const std::string &uri) {
- int i = 0;
- for (i = uri.length() - 1; i >= 0; i--) {
- if (uri.at(i) == '/')
- break;
+ const size_t last_slash_pos = uri.find_last_of('/');
+ size_t id_start_pos = 0;
+ if (last_slash_pos != std::string::npos) {
+ id_start_pos = last_slash_pos + 1;
}
- return utils::Identifier::parse(uri.substr(i + 1, uri.length() - (i + 1)));
+ return utils::Identifier::parse(uri.substr(id_start_pos));
}
std::shared_ptr<Transaction>
HttpSiteToSiteClient::createTransaction(TransferDirection direction) {
diff --git a/extensions/http-curl/tests/C2UpdateAgentTest.cpp
b/extensions/http-curl/tests/C2UpdateAgentTest.cpp
index 3ab4409..5e61f7e 100644
--- a/extensions/http-curl/tests/C2UpdateAgentTest.cpp
+++ b/extensions/http-curl/tests/C2UpdateAgentTest.cpp
@@ -19,6 +19,7 @@
#undef NDEBUG
#include "HTTPIntegrationBase.h"
#include "HTTPHandlers.h"
+#include "utils/gsl.h"
int main(int argc, char **argv) {
const cmd_args args = parse_cmdline_args(argc, argv, "update");
@@ -34,6 +35,6 @@ int main(int argc, char **argv) {
const auto then = std::chrono::system_clock::now();
const auto seconds = std::chrono::duration_cast<std::chrono::seconds>(then -
start).count();
- assert(handler.calls_ <= (seconds) + 2);
+ assert(handler.calls_ <= gsl::narrow<size_t>(seconds + 2));
return 0;
}
diff --git a/extensions/http-curl/tests/C2UpdateTest.cpp
b/extensions/http-curl/tests/C2UpdateTest.cpp
index 2c85a79..24d4693 100644
--- a/extensions/http-curl/tests/C2UpdateTest.cpp
+++ b/extensions/http-curl/tests/C2UpdateTest.cpp
@@ -19,6 +19,7 @@
#undef NDEBUG
#include "HTTPIntegrationBase.h"
#include "HTTPHandlers.h"
+#include "utils/gsl.h"
#include "utils/IntegrationTestUtils.h"
int main(int argc, char **argv) {
@@ -35,6 +36,6 @@ int main(int argc, char **argv) {
const auto then = std::chrono::system_clock::now();
const auto seconds = std::chrono::duration_cast<std::chrono::seconds>(then -
start).count();
- assert(handler.calls_ <= seconds + 1);
+ assert(handler.calls_ <= gsl::narrow<size_t>(seconds + 1));
return 0;
}
diff --git a/extensions/http-curl/tests/HTTPHandlers.h
b/extensions/http-curl/tests/HTTPHandlers.h
index 1063665..4e7d62b 100644
--- a/extensions/http-curl/tests/HTTPHandlers.h
+++ b/extensions/http-curl/tests/HTTPHandlers.h
@@ -29,6 +29,7 @@
#include "rapidjson/document.h"
#include "HTTPUtils.h"
#include "ServerAwareHandler.h"
+#include "utils/gsl.h"
static std::atomic<int> transaction_id;
static std::atomic<int> transaction_id_output;
@@ -280,7 +281,7 @@ class FlowFileResponder : public ServerAwareHandler {
minifi::io::BufferStream serializer;
minifi::io::CRCStream < minifi::io::BaseStream >
stream(gsl::make_not_null(&serializer));
for (const auto& flow : flows) {
- uint32_t num_attributes = flow->attributes.size();
+ uint32_t num_attributes =
gsl::narrow<uint32_t>(flow->attributes.size());
stream.write(num_attributes);
for (const auto& entry : flow->attributes) {
stream.write(entry.first);
diff --git a/extensions/http-curl/tests/HTTPIntegrationBase.h
b/extensions/http-curl/tests/HTTPIntegrationBase.h
index 48724bb..29e5672 100644
--- a/extensions/http-curl/tests/HTTPIntegrationBase.h
+++ b/extensions/http-curl/tests/HTTPIntegrationBase.h
@@ -207,7 +207,7 @@ class VerifyC2UpdateAgent : public VerifyC2Update {
void runAssertions() override {
using org::apache::nifi::minifi::utils::verifyLogLinePresenceInPollTime;
- assert(verifyLogLinePresenceInPollTime(std::chrono::seconds(10), "removing
file", "May not have command processor"));
+ assert(verifyLogLinePresenceInPollTime(std::chrono::seconds(10), "removing
file", "Executed update command"));
}
};
diff --git a/extensions/http-curl/tests/unit/InvokeHTTPTests.cpp
b/extensions/http-curl/tests/unit/InvokeHTTPTests.cpp
index 2a4220f..06a7bf0 100644
--- a/extensions/http-curl/tests/unit/InvokeHTTPTests.cpp
+++ b/extensions/http-curl/tests/unit/InvokeHTTPTests.cpp
@@ -39,6 +39,7 @@
#include "processors/InvokeHTTP.h"
#include "processors/ListenHTTP.h"
#include "processors/LogAttribute.h"
+#include "utils/gsl.h"
TEST_CASE("HTTPTestsWithNoResourceClaimPOST", "[httptest1]") {
TestController testController;
@@ -153,7 +154,7 @@ class CallBack : public minifi::OutputStreamCallback {
virtual int64_t process(const std::shared_ptr<minifi::io::BaseStream>&
stream) {
// leaving the typo for posterity sake
std::string st = "we're gnna write some test stuff";
- return
stream->write(reinterpret_cast<uint8_t*>(const_cast<char*>(st.c_str())),
st.length());
+ return
stream->write(reinterpret_cast<uint8_t*>(const_cast<char*>(st.c_str())),
gsl::narrow<int>(st.length()));
}
};
diff --git a/extensions/libarchive/ArchiveMetadata.cpp
b/extensions/libarchive/ArchiveMetadata.cpp
index eea31a8..69af90a 100644
--- a/extensions/libarchive/ArchiveMetadata.cpp
+++ b/extensions/libarchive/ArchiveMetadata.cpp
@@ -29,6 +29,7 @@
#include <iostream>
#include "utils/file/FileManager.h"
+#include "utils/gsl.h"
#include "Exception.h"
using org::apache::nifi::minifi::Exception;
@@ -38,7 +39,7 @@ rapidjson::Value
ArchiveEntryMetadata::toJson(rapidjson::Document::AllocatorType
rapidjson::Value entryVal(rapidjson::kObjectType);
rapidjson::Value entryNameVal;
- entryNameVal.SetString(entryName.c_str(), entryName.length());
+ entryNameVal.SetString(entryName.c_str(),
gsl::narrow<rapidjson::SizeType>(entryName.length()));
entryVal.AddMember("entry_name", entryNameVal, alloc);
entryVal.AddMember("entry_type", entryType, alloc);
@@ -51,7 +52,7 @@ rapidjson::Value
ArchiveEntryMetadata::toJson(rapidjson::Document::AllocatorType
if (entryType == AE_IFREG) {
rapidjson::Value stashKeyVal;
- stashKeyVal.SetString(stashKey.c_str(), stashKey.length());
+ stashKeyVal.SetString(stashKey.c_str(),
gsl::narrow<rapidjson::SizeType>(stashKey.length()));
entryVal.AddMember("stash_key", stashKeyVal, alloc);
}
@@ -107,7 +108,7 @@ rapidjson::Value
ArchiveMetadata::toJson(rapidjson::Document::AllocatorType &all
rapidjson::Value lensVal(rapidjson::kObjectType);
rapidjson::Value archiveFormatNameVal;
- archiveFormatNameVal.SetString(archiveFormatName.c_str(),
archiveFormatName.length());
+ archiveFormatNameVal.SetString(archiveFormatName.c_str(),
gsl::narrow<rapidjson::SizeType>(archiveFormatName.length()));
lensVal.AddMember("archive_format_name", archiveFormatNameVal, alloc);
lensVal.AddMember("archive_format", archiveFormat, alloc);
@@ -115,12 +116,12 @@ rapidjson::Value
ArchiveMetadata::toJson(rapidjson::Document::AllocatorType &all
if (!archiveName.empty()) {
rapidjson::Value archiveNameVal;
- archiveNameVal.SetString(archiveName.c_str(), archiveName.length());
+ archiveNameVal.SetString(archiveName.c_str(),
gsl::narrow<rapidjson::SizeType>(archiveName.length()));
lensVal.AddMember("archive_name", archiveNameVal, alloc);
}
rapidjson::Value focusedEntryVal;
- focusedEntryVal.SetString(focusedEntry.c_str(), focusedEntry.length());
+ focusedEntryVal.SetString(focusedEntry.c_str(),
gsl::narrow<rapidjson::SizeType>(focusedEntry.length()));
lensVal.AddMember("focused_entry", focusedEntryVal, alloc);
return lensVal;
diff --git a/extensions/libarchive/BinFiles.h b/extensions/libarchive/BinFiles.h
index 604474e..6914618 100644
--- a/extensions/libarchive/BinFiles.h
+++ b/extensions/libarchive/BinFiles.h
@@ -30,6 +30,7 @@
#include "core/Core.h"
#include "core/Resource.h"
#include "core/logging/LoggerConfiguration.h"
+#include "utils/gsl.h"
#include "utils/Id.h"
namespace org {
@@ -113,7 +114,7 @@ class Bin {
return creation_dated_;
}
int getSize() {
- return queue_.size();
+ return gsl::narrow<int>(queue_.size());
}
utils::SmallString<36> getUUIDStr() {
diff --git a/extensions/libarchive/CompressContent.h
b/extensions/libarchive/CompressContent.h
index 5c3a775..1a43217 100644
--- a/extensions/libarchive/CompressContent.h
+++ b/extensions/libarchive/CompressContent.h
@@ -34,6 +34,7 @@
#include "core/logging/LoggerConfiguration.h"
#include "io/ZlibStream.h"
#include "utils/Enum.h"
+#include "utils/gsl.h"
namespace org {
namespace apache {
@@ -183,7 +184,7 @@ public:
static la_ssize_t archive_write(struct archive* /*arch*/, void *context,
const void *buff, size_t size) {
WriteCallback *callback = (WriteCallback *) context;
- la_ssize_t ret =
callback->stream_->write(reinterpret_cast<uint8_t*>(const_cast<void*>(buff)),
size);
+ la_ssize_t ret =
callback->stream_->write(reinterpret_cast<uint8_t*>(const_cast<void*>(buff)),
gsl::narrow<int>(size));
if (ret > 0)
callback->size_ += (int64_t) ret;
return ret;
@@ -332,16 +333,16 @@ public:
size_ = 0;
while (size_ < entry_size) {
char buffer[8192];
- int ret = archive_read_data(arch, buffer, sizeof(buffer));
- if (ret < 0) {
+ const auto read_result = archive_read_data(arch, buffer,
sizeof(buffer));
+ if (read_result < 0) {
archive_read_log_error_cleanup(arch);
return -1;
}
- if (ret == 0)
+ if (read_result == 0)
break;
- size_ += ret;
- ret = stream_->write(reinterpret_cast<uint8_t*>(buffer), ret);
- if (ret < 0) {
+ size_ += read_result;
+ const auto write_result =
stream_->write(reinterpret_cast<uint8_t*>(buffer),
gsl::narrow<int>(read_result));
+ if (write_result < 0) {
archive_read_log_error_cleanup(arch);
return -1;
}
@@ -382,7 +383,7 @@ public:
std::vector<uint8_t> buffer(16 * 1024U);
int64_t read_size = 0;
while (read_size < gsl::narrow<int64_t>(writer_.flow_->getSize())) {
- int ret = inputStream->read(buffer.data(), buffer.size());
+ int ret = inputStream->read(buffer.data(),
gsl::narrow<int>(buffer.size()));
if (ret < 0) {
return -1;
} else if (ret == 0) {
diff --git a/extensions/libarchive/MergeContent.h
b/extensions/libarchive/MergeContent.h
index 341ddca..092b37f 100644
--- a/extensions/libarchive/MergeContent.h
+++ b/extensions/libarchive/MergeContent.h
@@ -26,6 +26,7 @@
#include "archive.h"
#include "core/logging/LoggerConfiguration.h"
#include "serialization/FlowFileSerializer.h"
+#include "utils/gsl.h"
namespace org {
namespace apache {
@@ -79,7 +80,7 @@ class BinaryConcatenationMerge : public MergeBin {
int64_t process(const std::shared_ptr<io::BaseStream>& stream) {
int64_t ret = 0;
if (!header_.empty()) {
- int64_t len =
stream->write(reinterpret_cast<uint8_t*>(const_cast<char*>(header_.data())),
header_.size());
+ int64_t len =
stream->write(reinterpret_cast<uint8_t*>(const_cast<char*>(header_.data())),
gsl::narrow<int>(header_.size()));
if (len < 0)
return len;
ret += len;
@@ -87,7 +88,7 @@ class BinaryConcatenationMerge : public MergeBin {
bool isFirst = true;
for (auto flow : flows_) {
if (!isFirst && !demarcator_.empty()) {
- int64_t len =
stream->write(reinterpret_cast<uint8_t*>(const_cast<char*>(demarcator_.data())),
demarcator_.size());
+ int64_t len =
stream->write(reinterpret_cast<uint8_t*>(const_cast<char*>(demarcator_.data())),
gsl::narrow<int>(demarcator_.size()));
if (len < 0)
return len;
ret += len;
@@ -99,7 +100,7 @@ class BinaryConcatenationMerge : public MergeBin {
isFirst = false;
}
if (!footer_.empty()) {
- int64_t len =
stream->write(reinterpret_cast<uint8_t*>(const_cast<char*>(footer_.data())),
footer_.size());
+ int64_t len =
stream->write(reinterpret_cast<uint8_t*>(const_cast<char*>(footer_.data())),
gsl::narrow<int>(footer_.size()));
if (len < 0)
return len;
ret += len;
@@ -131,7 +132,7 @@ class ArchiveMerge {
int totalWrote = 0;
int remaining = size;
while (remaining > 0) {
- int ret = archive_write_data(arch_, data + totalWrote, remaining);
+ const auto ret = archive_write_data(arch_, data + totalWrote,
remaining);
if (ret < 0) {
return ret;
}
@@ -171,7 +172,7 @@ class ArchiveMerge {
WriteCallback *callback = (WriteCallback *) context;
uint8_t* data = reinterpret_cast<uint8_t*>(const_cast<void*>(buff));
la_ssize_t totalWrote = 0;
- size_t remaining = size;
+ int remaining = gsl::narrow<int>(size);
while (remaining > 0) {
la_ssize_t ret = callback->stream_->write(data + totalWrote,
remaining);
if (ret < 0) {
diff --git a/extensions/libarchive/UnfocusArchiveEntry.cpp
b/extensions/libarchive/UnfocusArchiveEntry.cpp
index 1569c34..af1b428 100644
--- a/extensions/libarchive/UnfocusArchiveEntry.cpp
+++ b/extensions/libarchive/UnfocusArchiveEntry.cpp
@@ -31,6 +31,7 @@
#include "core/ProcessContext.h"
#include "core/ProcessSession.h"
+#include "utils/gsl.h"
namespace org {
namespace apache {
@@ -155,7 +156,7 @@ typedef struct {
la_ssize_t UnfocusArchiveEntry::WriteCallback::write_cb(struct archive *, void
*d, const void *buffer, size_t length) {
auto data = static_cast<UnfocusArchiveEntryWriteData *>(d);
const uint8_t *ui_buffer = static_cast<const uint8_t*>(buffer);
- return data->stream->write(const_cast<uint8_t*>(ui_buffer), length);
+ return data->stream->write(const_cast<uint8_t*>(ui_buffer),
gsl::narrow<int>(length));
}
int64_t UnfocusArchiveEntry::WriteCallback::process(const
std::shared_ptr<io::BaseStream>& stream) {
diff --git a/extensions/librdkafka/PublishKafka.cpp
b/extensions/librdkafka/PublishKafka.cpp
index 7437f75..d58c8e5 100644
--- a/extensions/librdkafka/PublishKafka.cpp
+++ b/extensions/librdkafka/PublishKafka.cpp
@@ -27,6 +27,7 @@
#include <set>
#include <vector>
+#include "utils/gsl.h"
#include "utils/TimeUtil.h"
#include "utils/StringUtils.h"
#include "utils/GeneralUtils.h"
@@ -407,7 +408,7 @@ class ReadCallback : public InputStreamCallback {
}
for (size_t segment_num = 0; read_size_ < flow_size_; ++segment_num) {
- const int readRet = stream->read(buffer.data(), buffer.size());
+ const int readRet = stream->read(buffer.data(),
gsl::narrow<int>(buffer.size()));
if (readRet < 0) {
status_ = -1;
error_ = "Failed to read from stream";
diff --git a/extensions/rocksdb-repos/DatabaseContentRepository.cpp
b/extensions/rocksdb-repos/DatabaseContentRepository.cpp
index b2a78b0..54e42d4 100644
--- a/extensions/rocksdb-repos/DatabaseContentRepository.cpp
+++ b/extensions/rocksdb-repos/DatabaseContentRepository.cpp
@@ -17,11 +17,14 @@
*/
#include "DatabaseContentRepository.h"
+
#include <memory>
#include <string>
+
#include "RocksDbStream.h"
#include "rocksdb/merge_operator.h"
#include "utils/GeneralUtils.h"
+#include "utils/gsl.h"
#include "Exception.h"
namespace org {
@@ -84,7 +87,7 @@ void DatabaseContentRepository::Session::commit() {
if (outStream == nullptr) {
throw Exception(REPOSITORY_EXCEPTION, "Couldn't open the underlying
resource for write: " + resource.first->getContentFullPath());
}
- const auto size = resource.second->size();
+ const int size = gsl::narrow<int>(resource.second->size());
if (outStream->write(const_cast<uint8_t*>(resource.second->getBuffer()),
size) != size) {
throw Exception(REPOSITORY_EXCEPTION, "Failed to write new resource: " +
resource.first->getContentFullPath());
}
@@ -94,7 +97,7 @@ void DatabaseContentRepository::Session::commit() {
if (outStream == nullptr) {
throw Exception(REPOSITORY_EXCEPTION, "Couldn't open the underlying
resource for append: " + resource.first->getContentFullPath());
}
- const auto size = resource.second->size();
+ const int size = gsl::narrow<int>(resource.second->size());
if (outStream->write(const_cast<uint8_t*>(resource.second->getBuffer()),
size) != size) {
throw Exception(REPOSITORY_EXCEPTION, "Failed to append to resource: " +
resource.first->getContentFullPath());
}
diff --git a/extensions/rocksdb-repos/FlowFileRepository.cpp
b/extensions/rocksdb-repos/FlowFileRepository.cpp
index a7dc5e6..0360143 100644
--- a/extensions/rocksdb-repos/FlowFileRepository.cpp
+++ b/extensions/rocksdb-repos/FlowFileRepository.cpp
@@ -15,13 +15,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-#include "FlowFileRecord.h"
#include "FlowFileRepository.h"
-#include "rocksdb/options.h"
-#include "rocksdb/write_batch.h"
-#include "rocksdb/slice.h"
-
#include <chrono>
#include <memory>
#include <string>
@@ -29,6 +24,12 @@
#include <vector>
#include <list>
+#include "rocksdb/options.h"
+#include "rocksdb/write_batch.h"
+#include "rocksdb/slice.h"
+#include "FlowFileRecord.h"
+#include "utils/gsl.h"
+
namespace org {
namespace apache {
namespace nifi {
@@ -68,7 +69,7 @@ void FlowFileRepository::flush() {
}
utils::Identifier containerId;
- auto eventRead = FlowFileRecord::DeSerialize(reinterpret_cast<const
uint8_t *>(values[i].data()), values[i].size(), content_repo_, containerId);
+ auto eventRead = FlowFileRecord::DeSerialize(reinterpret_cast<const
uint8_t *>(values[i].data()), gsl::narrow<int>(values[i].size()),
content_repo_, containerId);
if (eventRead) {
purgeList.push_back(eventRead);
}
@@ -152,7 +153,7 @@ void FlowFileRepository::prune_stored_flowfiles() {
auto it = opendb->NewIterator(rocksdb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
utils::Identifier containerId;
- auto eventRead = FlowFileRecord::DeSerialize(reinterpret_cast<const
uint8_t *>(it->value().data()), it->value().size(), content_repo_, containerId);
+ auto eventRead = FlowFileRecord::DeSerialize(reinterpret_cast<const
uint8_t *>(it->value().data()), gsl::narrow<int>(it->value().size()),
content_repo_, containerId);
std::string key = it->key().ToString();
if (eventRead) {
// on behalf of the just resurrected persisted instance
diff --git a/extensions/standard-processors/processors/GenerateFlowFile.cpp
b/extensions/standard-processors/processors/GenerateFlowFile.cpp
index a2dc1b3..bf38689 100644
--- a/extensions/standard-processors/processors/GenerateFlowFile.cpp
+++ b/extensions/standard-processors/processors/GenerateFlowFile.cpp
@@ -34,6 +34,7 @@
#include <utility>
#include <vector>
+#include "utils/gsl.h"
#include "utils/StringUtils.h"
#include "core/ProcessContext.h"
#include "core/ProcessSession.h"
@@ -62,7 +63,7 @@ core::Property GenerateFlowFile::UniqueFlowFiles(
core::Relationship GenerateFlowFile::Success("success", "success operational
on the flow record");
-static const char * TEXT_CHARS =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()-_=+/?.,';:\"?<>\n\t
";
+constexpr const char * TEXT_CHARS =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()-_=+/?.,';:\"?<>\n\t
";
void GenerateFlowFile::initialize() {
// Set the supported properties
@@ -82,7 +83,8 @@ void generateData(std::vector<char>& data, bool textData =
false) {
std::random_device rd;
std::mt19937 eng(rd());
if (textData) {
- std::uniform_int_distribution<> distr(0, strlen(TEXT_CHARS) - 1);
+ const int index_of_last_char = gsl::narrow<int>(strlen(TEXT_CHARS)) - 1;
+ std::uniform_int_distribution<> distr(0, index_of_last_char);
auto rand = std::bind(distr, eng);
std::generate_n(data.begin(), data.size(), rand);
std::for_each(data.begin(), data.end(), [](char & c) { c =
TEXT_CHARS[c];});
diff --git a/extensions/standard-processors/processors/GenerateFlowFile.h
b/extensions/standard-processors/processors/GenerateFlowFile.h
index b5d7dfd..608f7c0 100644
--- a/extensions/standard-processors/processors/GenerateFlowFile.h
+++ b/extensions/standard-processors/processors/GenerateFlowFile.h
@@ -30,6 +30,7 @@
#include "core/ProcessSession.h"
#include "core/Core.h"
#include "core/Resource.h"
+#include "utils/gsl.h"
namespace org {
namespace apache {
@@ -73,7 +74,7 @@ class GenerateFlowFile : public core::Processor {
int64_t process(const std::shared_ptr<io::BaseStream>& stream) {
int64_t ret = 0;
if (data_.size() > 0)
- ret = stream->write(reinterpret_cast<uint8_t*>(&data_[0]),
data_.size());
+ ret = stream->write(reinterpret_cast<uint8_t*>(&data_[0]),
gsl::narrow<int>(data_.size()));
return ret;
}
};
diff --git a/extensions/standard-processors/processors/GetTCP.h
b/extensions/standard-processors/processors/GetTCP.h
index 58cfb82..48883ed 100644
--- a/extensions/standard-processors/processors/GetTCP.h
+++ b/extensions/standard-processors/processors/GetTCP.h
@@ -35,6 +35,7 @@
#include "utils/ThreadPool.h"
#include "core/logging/LoggerConfiguration.h"
#include "controllers/SSLContextService.h"
+#include "utils/gsl.h"
namespace org {
namespace apache {
@@ -94,7 +95,7 @@ class DataHandlerCallback : public OutputStreamCallback {
~DataHandlerCallback() override = default;
int64_t process(const std::shared_ptr<io::BaseStream>& stream) override {
- return stream->write(message_, size_);
+ return stream->write(message_, gsl::narrow<int>(size_));
}
private:
diff --git a/extensions/standard-processors/processors/LogAttribute.h
b/extensions/standard-processors/processors/LogAttribute.h
index d1df602..7694230 100644
--- a/extensions/standard-processors/processors/LogAttribute.h
+++ b/extensions/standard-processors/processors/LogAttribute.h
@@ -31,6 +31,7 @@
#include "core/Core.h"
#include "core/Resource.h"
#include "core/logging/LoggerConfiguration.h"
+#include "utils/gsl.h"
namespace org {
namespace apache {
@@ -106,7 +107,7 @@ class LogAttribute : public core::Processor {
if (buffer_.size() == 0U) {
return 0U;
}
- int ret = stream->read(buffer_.data(), buffer_.size());
+ int ret = stream->read(buffer_.data(), gsl::narrow<int>(buffer_.size()));
if (ret != buffer_.size()) {
logger_->log_error("%zu bytes were requested from the stream but %d
bytes were read. Rolling back.", buffer_.size(), ret);
throw Exception(PROCESSOR_EXCEPTION, "Failed to read the entire
FlowFile.");
diff --git a/extensions/standard-processors/tests/unit/GetTCPTests.cpp
b/extensions/standard-processors/tests/unit/GetTCPTests.cpp
index e1470a7..27e223b 100644
--- a/extensions/standard-processors/tests/unit/GetTCPTests.cpp
+++ b/extensions/standard-processors/tests/unit/GetTCPTests.cpp
@@ -34,6 +34,7 @@
#include "core/ProcessSession.h"
#include "core/ProcessorNode.h"
#include "core/reporting/SiteToSiteProvenanceReportingTask.h"
+#include "utils/gsl.h"
TEST_CASE("GetTCPWithoutEOM", "[GetTCP1]") {
utils::Identifier ident = utils::Identifier();
@@ -111,7 +112,7 @@ TEST_CASE("GetTCPWithoutEOM", "[GetTCP1]") {
std::shared_ptr<core::ProcessSessionFactory> factory =
std::make_shared<core::ProcessSessionFactory>(context);
processor->onSchedule(context, factory);
processor->onTrigger(context, session);
- server.write(buffer, buffer.size());
+ server.write(buffer, gsl::narrow<int>(buffer.size()));
std::this_thread::sleep_for(std::chrono::seconds(2));
logAttribute->initialize();
@@ -226,7 +227,7 @@ TEST_CASE("GetTCPWithOEM", "[GetTCP2]") {
std::shared_ptr<core::ProcessSessionFactory> factory =
std::make_shared<core::ProcessSessionFactory>(context);
processor->onSchedule(context, factory);
processor->onTrigger(context, session);
- server.write(buffer, buffer.size());
+ server.write(buffer, gsl::narrow<int>(buffer.size()));
std::this_thread::sleep_for(std::chrono::seconds(2));
logAttribute->initialize();
@@ -350,7 +351,7 @@ TEST_CASE("GetTCPWithOnlyOEM", "[GetTCP3]") {
std::shared_ptr<core::ProcessSessionFactory> factory =
std::make_shared<core::ProcessSessionFactory>(context);
processor->onSchedule(context, factory);
processor->onTrigger(context, session);
- server.write(buffer, buffer.size());
+ server.write(buffer, gsl::narrow<int>(buffer.size()));
std::this_thread::sleep_for(std::chrono::seconds(2));
logAttribute->initialize();
diff --git a/extensions/windows-event-log/CollectorInitiatedSubscription.cpp
b/extensions/windows-event-log/CollectorInitiatedSubscription.cpp
index 54f6933..9215884 100644
--- a/extensions/windows-event-log/CollectorInitiatedSubscription.cpp
+++ b/extensions/windows-event-log/CollectorInitiatedSubscription.cpp
@@ -634,7 +634,7 @@ int CollectorInitiatedSubscription::processQueue(const
std::shared_ptr<core::Pro
}
int64_t process(const std::shared_ptr<io::BaseStream>& stream) {
- return stream->write((uint8_t*)&str_[0], str_.size());
+ return stream->write((uint8_t*)&str_[0], gsl::narrow<int>(str_.size()));
}
std::string str_;
diff --git a/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
b/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
index e3b6ae9..22442f9 100644
--- a/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
+++ b/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
@@ -652,7 +652,7 @@ void
ConsumeWindowsEventLog::putEventRenderFlowFileToSession(const EventRender&
}
int64_t process(const std::shared_ptr<io::BaseStream>& stream) {
- return
stream->write(reinterpret_cast<uint8_t*>(const_cast<char*>(str_.c_str())),
str_.size());
+ return
stream->write(reinterpret_cast<uint8_t*>(const_cast<char*>(str_.c_str())),
gsl::narrow<int>(str_.size()));
}
const std::string& str_;
diff --git a/extensions/windows-event-log/tests/BookmarkTests.cpp
b/extensions/windows-event-log/tests/BookmarkTests.cpp
index d42ebad..ffe3026 100644
--- a/extensions/windows-event-log/tests/BookmarkTests.cpp
+++ b/extensions/windows-event-log/tests/BookmarkTests.cpp
@@ -56,7 +56,7 @@ std::wstring bookmarkHandleAsXml(EVT_HANDLE event) {
std::array<wchar_t, BUFFER_SIZE> buffer = {};
DWORD buffer_used;
DWORD property_count;
- if (!EvtRender(nullptr, event, EvtRenderBookmark, buffer.size(),
buffer.data(), &buffer_used, &property_count)) {
+ if (!EvtRender(nullptr, event, EvtRenderBookmark,
gsl::narrow<DWORD>(buffer.size()), buffer.data(), &buffer_used,
&property_count)) {
FAIL("EvtRender() failed; error code: " << GetLastError());
}
return std::wstring{buffer.data()};
diff --git a/libminifi/include/FlowControlProtocol.h
b/libminifi/include/FlowControlProtocol.h
index ac3b060..3238cc2 100644
--- a/libminifi/include/FlowControlProtocol.h
+++ b/libminifi/include/FlowControlProtocol.h
@@ -36,6 +36,7 @@
#include "core/Property.h"
#include "properties/Configure.h"
#include "utils/file/FileUtils.h"
+#include "utils/gsl.h"
namespace org {
namespace apache {
@@ -244,8 +245,8 @@ class FlowControlProtocol {
// encode std::string
uint8_t *encode(uint8_t *buf, const std::string& value) {
// add the \0 for size
- buf = encode(buf, value.size() + 1);
- buf = encode(buf, const_cast<uint8_t*>(reinterpret_cast<const
uint8_t*>(value.c_str())), value.size() + 1);
+ buf = encode(buf, gsl::narrow<uint32_t>(value.size() + 1));
+ buf = encode(buf, const_cast<uint8_t*>(reinterpret_cast<const
uint8_t*>(value.c_str())), gsl::narrow<int>(value.size() + 1));
return buf;
}
diff --git a/libminifi/include/agent/build_description.h
b/libminifi/include/agent/build_description.h
index aeb9bed..de92612 100644
--- a/libminifi/include/agent/build_description.h
+++ b/libminifi/include/agent/build_description.h
@@ -127,7 +127,7 @@ class BuildDescription {
auto lastOfIdx = clazz.find_last_of("::");
if (lastOfIdx != std::string::npos) {
lastOfIdx++; // if a value is found, increment to move beyond the .
- int nameLength = clazz.length() - lastOfIdx;
+ size_t nameLength = clazz.length() - lastOfIdx;
class_name = clazz.substr(lastOfIdx, nameLength);
}
auto obj =
core::ClassLoader::getDefaultClassLoader().instantiate(class_name, class_name);
diff --git a/libminifi/include/c2/PayloadSerializer.h
b/libminifi/include/c2/PayloadSerializer.h
index b03da5e..89042c9 100644
--- a/libminifi/include/c2/PayloadSerializer.h
+++ b/libminifi/include/c2/PayloadSerializer.h
@@ -27,6 +27,8 @@
#include "core/state/Value.h"
#include "c2/C2Protocol.h"
#include "io/BaseStream.h"
+#include "utils/gsl.h"
+
namespace org {
namespace apache {
namespace nifi {
@@ -74,7 +76,7 @@ class PayloadSerializer {
}
static void serialize(uint16_t op, const C2Payload &payload,
std::shared_ptr<io::BaseStream> stream) {
uint8_t st;
- uint32_t size = payload.getNestedPayloads().size();
+ uint32_t size = gsl::narrow<uint32_t>(payload.getNestedPayloads().size());
stream->write(size);
for (auto nested_payload : payload.getNestedPayloads()) {
op = opToInt(nested_payload.getOperation());
@@ -83,11 +85,11 @@ class PayloadSerializer {
stream->write(nested_payload.getLabel());
stream->write(nested_payload.getIdentifier());
const std::vector<C2ContentResponse> &content =
nested_payload.getContent();
- size = content.size();
+ size = gsl::narrow<uint32_t>(content.size());
stream->write(size);
for (const auto &payload_content : content) {
stream->write(payload_content.name);
- size = payload_content.operation_arguments.size();
+ size =
gsl::narrow<uint32_t>(payload_content.operation_arguments.size());
stream->write(size);
for (auto content : payload_content.operation_arguments) {
stream->write(content.first);
@@ -152,11 +154,11 @@ class PayloadSerializer {
stream->write(payload.getIdentifier());
const std::vector<C2ContentResponse> &content = payload.getContent();
- uint32_t size = content.size();
+ uint32_t size = gsl::narrow<uint32_t>(content.size());
stream->write(size);
for (const auto &payload_content : content) {
stream->write(payload_content.name);
- size = payload_content.operation_arguments.size();
+ size = gsl::narrow<uint32_t>(payload_content.operation_arguments.size());
stream->write(size);
for (auto content : payload_content.operation_arguments) {
stream->write(content.first);
@@ -247,7 +249,7 @@ class PayloadSerializer {
return true;
}
static bool deserialize(std::vector<uint8_t> data, C2Payload &payload) {
- io::BufferStream stream(data.data(), data.size());
+ io::BufferStream stream(data.data(), gsl::narrow<unsigned
int>(data.size()));
uint8_t op, st = 0;
uint16_t version = 0;
diff --git a/libminifi/include/core/repository/VolatileFlowFileRepository.h
b/libminifi/include/core/repository/VolatileFlowFileRepository.h
index 88a2d80..73df967 100644
--- a/libminifi/include/core/repository/VolatileFlowFileRepository.h
+++ b/libminifi/include/core/repository/VolatileFlowFileRepository.h
@@ -23,6 +23,7 @@
#include "VolatileRepository.h"
#include "FlowFileRecord.h"
+#include "utils/gsl.h"
namespace org {
namespace apache {
@@ -62,7 +63,8 @@ class VolatileFlowFileRepository : public
VolatileRepository<std::string>, publi
std::lock_guard<std::mutex> lock(purge_mutex_);
for (auto purgeItem : purge_list_) {
utils::Identifier containerId;
- auto eventRead = FlowFileRecord::DeSerialize(reinterpret_cast<const
uint8_t *>(purgeItem.data()), purgeItem.size(), content_repo_, containerId);
+ auto eventRead = FlowFileRecord::DeSerialize(reinterpret_cast<const
uint8_t *>(purgeItem.data()), gsl::narrow<int>(purgeItem.size()),
+ content_repo_,
containerId);
if (eventRead) {
auto claim = eventRead->getResourceClaim();
if (claim) claim->decreaseFlowFileRecordOwnedCount();
diff --git a/libminifi/include/core/state/nodes/AgentInformation.h
b/libminifi/include/core/state/nodes/AgentInformation.h
index 63b1e36..4e70686 100644
--- a/libminifi/include/core/state/nodes/AgentInformation.h
+++ b/libminifi/include/core/state/nodes/AgentInformation.h
@@ -276,7 +276,7 @@ class ComponentManifest : public DeviceInformation {
std::string processorName = group.class_name_;
if (lastOfIdx != std::string::npos) {
lastOfIdx++; // if a value is found, increment to move beyond the .
- int nameLength = group.class_name_.length() - lastOfIdx;
+ size_t nameLength = group.class_name_.length() - lastOfIdx;
processorName = group.class_name_.substr(lastOfIdx, nameLength);
}
std::string description;
diff --git a/libminifi/include/io/AtomicEntryStream.h
b/libminifi/include/io/AtomicEntryStream.h
index 4be2847..13679ce 100644
--- a/libminifi/include/io/AtomicEntryStream.h
+++ b/libminifi/include/io/AtomicEntryStream.h
@@ -23,10 +23,13 @@
#include <mutex>
#include <cstring>
#include <algorithm>
+
#include "BaseStream.h"
#include "core/repository/AtomicRepoEntries.h"
#include "Exception.h"
#include "core/logging/LoggerConfiguration.h"
+#include "utils/gsl.h"
+
namespace org {
namespace apache {
namespace nifi {
@@ -137,7 +140,7 @@ int AtomicEntryStream<T>::read(uint8_t *buf, int buflen) {
core::repository::RepoValue<T> *value;
if (entry_->getValue(key_, &value)) {
if (offset_ + len > value->getBufferSize()) {
- len = value->getBufferSize() - offset_;
+ len = gsl::narrow<int>(value->getBufferSize()) -
gsl::narrow<int>(offset_);
if (len <= 0) {
entry_->decrementOwnership();
return 0;
diff --git a/libminifi/include/io/BufferStream.h
b/libminifi/include/io/BufferStream.h
index c393abb..3f0bfdc 100644
--- a/libminifi/include/io/BufferStream.h
+++ b/libminifi/include/io/BufferStream.h
@@ -23,6 +23,7 @@
#include <vector>
#include <string>
#include "BaseStream.h"
+#include "utils/gsl.h"
namespace org {
namespace apache {
@@ -39,7 +40,7 @@ class BufferStream : public BaseStream {
}
explicit BufferStream(const std::string& data) {
- write(reinterpret_cast<const uint8_t*>(data.c_str()), data.length());
+ write(reinterpret_cast<const uint8_t*>(data.c_str()),
gsl::narrow<int>(data.length()));
}
using BaseStream::read;
diff --git a/libminifi/include/provenance/Provenance.h
b/libminifi/include/provenance/Provenance.h
index 285a33f..3b7b4f7 100644
--- a/libminifi/include/provenance/Provenance.h
+++ b/libminifi/include/provenance/Provenance.h
@@ -18,12 +18,13 @@
#ifndef LIBMINIFI_INCLUDE_PROVENANCE_PROVENANCE_H_
#define LIBMINIFI_INCLUDE_PROVENANCE_PROVENANCE_H_
-#include <memory>
+#include <algorithm>
#include <atomic>
#include <cstdint>
#include <cstring>
#include <iostream>
#include <map>
+#include <memory>
#include <set>
#include <string>
#include <thread>
@@ -37,6 +38,7 @@
#include "FlowFileRecord.h"
#include "core/logging/LoggerConfiguration.h"
#include "ResourceClaim.h"
+#include "utils/gsl.h"
#include "utils/Id.h"
#include "utils/TimeUtil.h"
@@ -360,8 +362,8 @@ class ProvenanceEventRecord : public
core::SerializableComponent {
bool DeSerialize(const std::shared_ptr<core::SerializableComponent> &repo);
uint64_t getEventTime(const uint8_t *buffer, const size_t bufferSize) {
- int size = bufferSize > 72 ? 72 : bufferSize;
- org::apache::nifi::minifi::io::BufferStream outStream(buffer, size);
+ const auto size = std::min<size_t>(72, bufferSize);
+ org::apache::nifi::minifi::io::BufferStream outStream(buffer,
gsl::narrow<int>(size));
std::string uuid;
int ret = outStream.read(uuid);
diff --git a/libminifi/include/utils/HTTPClient.h
b/libminifi/include/utils/HTTPClient.h
index a03d248..82aa55b 100644
--- a/libminifi/include/utils/HTTPClient.h
+++ b/libminifi/include/utils/HTTPClient.h
@@ -35,6 +35,7 @@
#include "ByteArrayCallback.h"
#include "controllers/SSLContextService.h"
#include "core/Deprecated.h"
+#include "utils/gsl.h"
namespace org {
namespace apache {
@@ -278,7 +279,7 @@ class HTTPRequestResponse {
size_to_read = data.size();
}
memcpy(buf, data.data(), size_to_read);
- return size_to_read;
+ return gsl::narrow<int>(size_to_read);
}
size_t write_content(char* ptr, size_t size, size_t nmemb) {
diff --git a/libminifi/include/utils/StringUtils.h
b/libminifi/include/utils/StringUtils.h
index 04201cb..7dcfc49 100644
--- a/libminifi/include/utils/StringUtils.h
+++ b/libminifi/include/utils/StringUtils.h
@@ -33,6 +33,7 @@
#include <type_traits>
#include "utils/FailurePolicy.h"
#include "utils/GeneralUtils.h"
+#include "utils/gsl.h"
#include "utils/OptionalUtils.h"
#if defined(WIN32) || (__cplusplus >= 201103L && (!defined(__GLIBCXX__) ||
(__cplusplus >= 201402L) || (defined(_GLIBCXX_RELEASE) && _GLIBCXX_RELEASE >
4)))
@@ -134,7 +135,7 @@ class StringUtils {
*/
static bool StringToFloat(std::string input, float &output, FailurePolicy cp
= RETURN);
- static std::string replaceEnvironmentVariables(std::string& original_string);
+ static std::string replaceEnvironmentVariables(std::string source_string);
static std::string replaceOne(const std::string &input, const std::string
&from, const std::string &to);
@@ -159,9 +160,9 @@ class StringUtils {
}
inline static std::string hex_ascii(const std::string& in) {
- int len = in.length();
std::string newString;
- for (int i = 0; i < len; i += 2) {
+ newString.reserve(in.length() / 2);
+ for (size_t i = 0; i < in.length(); i += 2) {
std::string sstr = in.substr(i, 2);
char chr = (char) (int) strtol(sstr.c_str(), 0x00, 16); // NOLINT
newString.push_back(chr);
@@ -498,7 +499,7 @@ class StringUtils {
static std::pair<size_t, int> countOccurrences(const std::string &str, const
std::string &pattern) {
if (pattern.empty()) {
- return {str.size(), str.size() + 1};
+ return {str.size(), gsl::narrow<int>(str.size() + 1)};
}
size_t last_pos = 0;
diff --git a/libminifi/include/utils/file/FileUtils.h
b/libminifi/include/utils/file/FileUtils.h
index 603d171..721b455 100644
--- a/libminifi/include/utils/file/FileUtils.h
+++ b/libminifi/include/utils/file/FileUtils.h
@@ -85,6 +85,7 @@
#include "core/logging/LoggerConfiguration.h"
#include "utils/StringUtils.h"
#include "utils/file/PathUtils.h"
+#include "utils/gsl.h"
#ifndef S_ISDIR
#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
@@ -729,7 +730,7 @@ inline std::string get_executable_path() {
}
std::vector<char> buf(1024U);
while (true) {
- size_t ret = GetModuleFileNameA(hModule, buf.data(), buf.size());
+ size_t ret = GetModuleFileNameA(hModule, buf.data(),
gsl::narrow<DWORD>(buf.size()));
if (ret == 0U) {
return "";
}
diff --git a/libminifi/src/FlowControlProtocol.cpp
b/libminifi/src/FlowControlProtocol.cpp
index 5a2b0e2..8d8ad4a 100644
--- a/libminifi/src/FlowControlProtocol.cpp
+++ b/libminifi/src/FlowControlProtocol.cpp
@@ -193,7 +193,7 @@ int FlowControlProtocol::sendRegisterReq() {
data = this->encode(data, this->_controller->getName());
// send it
- int status = sendData(buffer.data(), size);
+ int status = sendData(buffer.data(), gsl::narrow<int>(size));
buffer.clear();
if (status <= 0) {
utils::file::FileUtils::close(_socket);
@@ -287,7 +287,7 @@ int FlowControlProtocol::sendReportReq() {
data = this->encode(data, this->_controller->getName());
// send it
- int status = sendData(buffer.data(), size);
+ int status = sendData(buffer.data(), gsl::narrow<int>(size));
buffer.clear();
if (status <= 0) {
utils::file::FileUtils::close(_socket);
diff --git a/libminifi/src/FlowFileRecord.cpp b/libminifi/src/FlowFileRecord.cpp
index eec81bf..813137b 100644
--- a/libminifi/src/FlowFileRecord.cpp
+++ b/libminifi/src/FlowFileRecord.cpp
@@ -31,6 +31,7 @@
#include "core/logging/LoggerConfiguration.h"
#include "core/Relationship.h"
#include "core/Repository.h"
+#include "utils/gsl.h"
namespace org {
namespace apache {
@@ -55,7 +56,7 @@ std::shared_ptr<FlowFileRecord>
FlowFileRecord::DeSerialize(const std::string& k
logger_->log_error("NiFi FlowFile Store event %s can not found", key);
return nullptr;
}
- io::BufferStream stream((const uint8_t*) value.data(), value.length());
+ io::BufferStream stream((const uint8_t*) value.data(),
gsl::narrow<int>(value.length()));
auto record = DeSerialize(stream, content_repo, container);
@@ -100,7 +101,7 @@ bool FlowFileRecord::Serialize(io::OutputStream &outStream)
{
return false;
}
// write flow attributes
- uint32_t numAttributes = attributes_.size();
+ uint32_t numAttributes = gsl::narrow<uint32_t>(attributes_.size());
ret = outStream.write(numAttributes);
if (ret != 4) {
return false;
diff --git a/libminifi/src/c2/C2Agent.cpp b/libminifi/src/c2/C2Agent.cpp
index 36ff43c..eb49f3f 100644
--- a/libminifi/src/c2/C2Agent.cpp
+++ b/libminifi/src/c2/C2Agent.cpp
@@ -660,12 +660,16 @@ void C2Agent::restart_agent() {
}
std::string command = cwd + "/bin/minifi.sh restart";
- system(command.c_str());
+ if (system(command.c_str()) != 0) {
+ logger_->log_warn("System command '%s' failed", command);
+ }
}
void C2Agent::update_agent() {
- if (!system(update_command_.c_str())) {
- logger_->log_warn("May not have command processor");
+ if (system(update_command_.c_str()) == 0) {
+ logger_->log_info("Executed update command '%s'", update_command_);
+ } else {
+ logger_->log_warn("Update command %s failed; may not have command
processor", update_command_);
}
}
diff --git a/libminifi/src/c2/ControllerSocketProtocol.cpp
b/libminifi/src/c2/ControllerSocketProtocol.cpp
index dd6464d..8322302 100644
--- a/libminifi/src/c2/ControllerSocketProtocol.cpp
+++ b/libminifi/src/c2/ControllerSocketProtocol.cpp
@@ -24,6 +24,7 @@
#include <utility>
#include <vector>
+#include "utils/gsl.h"
#include "utils/StringUtils.h"
namespace org {
@@ -179,7 +180,7 @@ void
ControllerSocketProtocol::initialize(core::controller::ControllerServicePro
io::BufferStream resp;
resp.write(&head, 1);
resp.write(response.str());
- stream->write(const_cast<uint8_t*>(resp.getBuffer()), resp.size());
+ stream->write(const_cast<uint8_t*>(resp.getBuffer()),
gsl::narrow<int>(resp.size()));
} else if (what == "components") {
io::BufferStream resp;
resp.write(&head, 1);
@@ -189,7 +190,7 @@ void
ControllerSocketProtocol::initialize(core::controller::ControllerServicePro
resp.write(component->getComponentName());
resp.write(component->isRunning() ? "true" : "false");
}
- stream->write(const_cast<uint8_t*>(resp.getBuffer()), resp.size());
+ stream->write(const_cast<uint8_t*>(resp.getBuffer()),
gsl::narrow<int>(resp.size()));
} else if (what == "jstack") {
io::BufferStream resp;
resp.write(&head, 1);
@@ -205,7 +206,7 @@ void
ControllerSocketProtocol::initialize(core::controller::ControllerServicePro
resp.write(line);
}
}
- stream->write(const_cast<uint8_t*>(resp.getBuffer()), resp.size());
+ stream->write(const_cast<uint8_t*>(resp.getBuffer()),
gsl::narrow<int>(resp.size()));
} else if (what == "connections") {
io::BufferStream resp;
resp.write(&head, 1);
@@ -214,7 +215,7 @@ void
ControllerSocketProtocol::initialize(core::controller::ControllerServicePro
for (const auto &connection : queue_full_) {
resp.write(connection.first, false);
}
- stream->write(const_cast<uint8_t*>(resp.getBuffer()), resp.size());
+ stream->write(const_cast<uint8_t*>(resp.getBuffer()),
gsl::narrow<int>(resp.size()));
} else if (what == "getfull") {
std::vector<std::string> full_connections;
{
@@ -232,7 +233,7 @@ void
ControllerSocketProtocol::initialize(core::controller::ControllerServicePro
for (auto conn : full_connections) {
resp.write(conn);
}
- stream->write(const_cast<uint8_t*>(resp.getBuffer()), resp.size());
+ stream->write(const_cast<uint8_t*>(resp.getBuffer()),
gsl::narrow<int>(resp.size()));
}
}
break;
diff --git a/libminifi/src/c2/protocols/RESTProtocol.cpp
b/libminifi/src/c2/protocols/RESTProtocol.cpp
index 23a9e8d..8903c71 100644
--- a/libminifi/src/c2/protocols/RESTProtocol.cpp
+++ b/libminifi/src/c2/protocols/RESTProtocol.cpp
@@ -27,6 +27,7 @@
#include <vector>
#include "core/TypedValues.h"
+#include "utils/gsl.h"
namespace org {
namespace apache {
@@ -147,13 +148,13 @@ void setJsonStr(const std::string& key, const
state::response::ValueNode& value,
rapidjson::Value valueVal;
const char* c_key = key.c_str();
auto base_type = value.getValue();
- keyVal.SetString(c_key, key.length(), alloc);
+ keyVal.SetString(c_key, gsl::narrow<rapidjson::SizeType>(key.length()),
alloc);
auto type_index = base_type->getTypeIndex();
if (auto sub_type =
std::dynamic_pointer_cast<core::TransformableValue>(base_type)) {
auto str = base_type->getStringValue();
const char* c_val = str.c_str();
- valueVal.SetString(c_val, str.length(), alloc);
+ valueVal.SetString(c_val, gsl::narrow<rapidjson::SizeType>(str.length()),
alloc);
} else {
if (type_index == state::response::Value::BOOL_TYPE) {
bool value = false;
@@ -178,7 +179,7 @@ void setJsonStr(const std::string& key, const
state::response::ValueNode& value,
} else {
auto str = base_type->getStringValue();
const char* c_val = str.c_str();
- valueVal.SetString(c_val, str.length(), alloc);
+ valueVal.SetString(c_val,
gsl::narrow<rapidjson::SizeType>(str.length()), alloc);
}
}
parent.AddMember(keyVal, valueVal, alloc);
@@ -186,7 +187,7 @@ void setJsonStr(const std::string& key, const
state::response::ValueNode& value,
rapidjson::Value RESTProtocol::getStringValue(const std::string& value,
rapidjson::Document::AllocatorType& alloc) { // NOLINT
rapidjson::Value Val;
- Val.SetString(value.c_str(), value.length(), alloc);
+ Val.SetString(value.c_str(),
gsl::narrow<rapidjson::SizeType>(value.length()), alloc);
return Val;
}
@@ -215,7 +216,7 @@ void RESTProtocol::mergePayloadContent(rapidjson::Value
&target, const C2Payload
for (const auto &payload_content : content) {
for (const auto& op_arg : payload_content.operation_arguments) {
rapidjson::Value keyVal;
- keyVal.SetString(op_arg.first.c_str(), op_arg.first.length(), alloc);
+ keyVal.SetString(op_arg.first.c_str(),
gsl::narrow<rapidjson::SizeType>(op_arg.first.length()), alloc);
if (is_parent_array) {
target.PushBack(keyVal, alloc);
} else {
@@ -253,7 +254,7 @@ std::string RESTProtocol::serializeJsonRootPayload(const
C2Payload& payload) {
rapidjson::Value opReqStrVal;
std::string operation_request_str = getOperation(payload);
- opReqStrVal.SetString(operation_request_str.c_str(),
operation_request_str.length(), alloc);
+ opReqStrVal.SetString(operation_request_str.c_str(),
gsl::narrow<rapidjson::SizeType>(operation_request_str.length()), alloc);
json_payload.AddMember("operation", opReqStrVal, alloc);
std::string operationid = payload.getIdentifier();
diff --git a/libminifi/src/controllers/LinuxPowerManagementService.cpp
b/libminifi/src/controllers/LinuxPowerManagementService.cpp
index 5707b1b..4fcdc59 100644
--- a/libminifi/src/controllers/LinuxPowerManagementService.cpp
+++ b/libminifi/src/controllers/LinuxPowerManagementService.cpp
@@ -24,6 +24,7 @@
#include <utility>
#include <vector>
+#include "utils/gsl.h"
#include "utils/StringUtils.h"
namespace org {
@@ -135,7 +136,7 @@ bool LinuxPowerManagerService::shouldReduce() {
}
// average
- battery_level_ = battery_sum / paths_.size();
+ battery_level_ = battery_sum / gsl::narrow<int>(paths_.size());
// only reduce if we're still going down OR we've triggered the low battery
threshold
if (battery_level_ < trigger_ && (battery_level_ < prev_level ||
battery_level_ < low_battery_trigger_)) {
diff --git a/libminifi/src/core/ContentSession.cpp
b/libminifi/src/core/ContentSession.cpp
index 8d761d3..14221ca 100644
--- a/libminifi/src/core/ContentSession.cpp
+++ b/libminifi/src/core/ContentSession.cpp
@@ -22,6 +22,7 @@
#include "ResourceClaim.h"
#include "io/BaseStream.h"
#include "Exception.h"
+#include "utils/gsl.h"
namespace org {
namespace apache {
@@ -71,8 +72,9 @@ void ContentSession::commit() {
if (outStream == nullptr) {
throw Exception(REPOSITORY_EXCEPTION, "Couldn't open the underlying
resource for write: " + resource.first->getContentFullPath());
}
- const auto size = resource.second->size();
- if (outStream->write(const_cast<uint8_t*>(resource.second->getBuffer()),
size) != size) {
+ const int size = gsl::narrow<int>(resource.second->size());
+ const int bytes_written =
outStream->write(const_cast<uint8_t*>(resource.second->getBuffer()), size);
+ if (bytes_written != size) {
throw Exception(REPOSITORY_EXCEPTION, "Failed to write new resource: " +
resource.first->getContentFullPath());
}
}
@@ -81,8 +83,9 @@ void ContentSession::commit() {
if (outStream == nullptr) {
throw Exception(REPOSITORY_EXCEPTION, "Couldn't open the underlying
resource for append: " + resource.first->getContentFullPath());
}
- const auto size = resource.second->size();
- if (outStream->write(const_cast<uint8_t*>(resource.second->getBuffer()),
size) != size) {
+ const int size = gsl::narrow<int>(resource.second->size());
+ const int bytes_written =
outStream->write(const_cast<uint8_t*>(resource.second->getBuffer()), size);
+ if (bytes_written != size) {
throw Exception(REPOSITORY_EXCEPTION, "Failed to append to resource: " +
resource.first->getContentFullPath());
}
}
diff --git a/libminifi/src/core/ProcessSession.cpp
b/libminifi/src/core/ProcessSession.cpp
index edb2a00..f8f885e 100644
--- a/libminifi/src/core/ProcessSession.cpp
+++ b/libminifi/src/core/ProcessSession.cpp
@@ -301,11 +301,11 @@ int ProcessSession::read(const
std::shared_ptr<core::FlowFile> &flow, InputStrea
stream->seek(flow->getOffset());
- int ret = callback->process(stream);
+ auto ret = callback->process(stream);
if (ret < 0) {
throw Exception(FILE_OPERATION_EXCEPTION, "Failed to process flowfile
content");
}
- return ret;
+ return gsl::narrow<int>(ret);
} catch (std::exception &exception) {
logger_->log_debug("Caught Exception %s", exception.what());
throw;
@@ -326,7 +326,7 @@ void ProcessSession::importFrom(io::InputStream&& stream,
const std::shared_ptr<
*/
void ProcessSession::importFrom(io::InputStream &stream, const
std::shared_ptr<core::FlowFile> &flow) {
std::shared_ptr<ResourceClaim> claim = content_session_->create();
- size_t max_read = getpagesize();
+ int max_read = getpagesize();
std::vector<uint8_t> charBuffer(max_read);
try {
@@ -336,10 +336,10 @@ void ProcessSession::importFrom(io::InputStream &stream,
const std::shared_ptr<c
if (nullptr == content_stream) {
throw Exception(FILE_OPERATION_EXCEPTION, "Could not obtain claim for "
+ claim->getContentFullPath());
}
- size_t position = 0;
- const size_t max_size = stream.size();
+ int position = 0;
+ const int max_size = gsl::narrow<int>(stream.size());
while (position < max_size) {
- const size_t read_size = std::min(max_read, max_size - position);
+ const int read_size = std::min(max_read, max_size - position);
stream.read(charBuffer, read_size);
content_stream->write(charBuffer.data(), read_size);
@@ -395,7 +395,7 @@ void ProcessSession::import(std::string source, const
std::shared_ptr<FlowFile>
while (input.good()) {
input.read(reinterpret_cast<char*>(charBuffer.data()), size);
if (input) {
- if (stream->write(charBuffer.data(), size) < 0) {
+ if (stream->write(charBuffer.data(), gsl::narrow<int>(size)) < 0) {
invalidWrite = true;
break;
}
diff --git a/libminifi/src/core/reporting/SiteToSiteProvenanceReportingTask.cpp
b/libminifi/src/core/reporting/SiteToSiteProvenanceReportingTask.cpp
index 621370e..7dc203e 100644
--- a/libminifi/src/core/reporting/SiteToSiteProvenanceReportingTask.cpp
+++ b/libminifi/src/core/reporting/SiteToSiteProvenanceReportingTask.cpp
@@ -17,6 +17,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+#include <rapidjson/document.h>
+#include <rapidjson/writer.h>
+#include <rapidjson/stringbuffer.h>
+#include <rapidjson/prettywriter.h>
+
#include <vector>
#include <queue>
#include <map>
@@ -27,6 +32,7 @@
#include <functional>
#include <iostream>
#include <utility>
+
#include "core/Repository.h"
#include "core/reporting/SiteToSiteProvenanceReportingTask.h"
#include "../include/io/StreamFactory.h"
@@ -36,12 +42,7 @@
#include "core/ProcessSession.h"
#include "provenance/Provenance.h"
#include "FlowController.h"
-
-#include "rapidjson/document.h"
-#include "rapidjson/writer.h"
-#include "rapidjson/stringbuffer.h"
-#include "rapidjson/prettywriter.h"
-
+#include "utils/gsl.h"
namespace org {
namespace apache {
@@ -62,35 +63,35 @@ void setJsonStr(const std::string& key, const std::string&
value, rapidjson::Val
const char* c_key = key.c_str();
const char* c_val = value.c_str();
- keyVal.SetString(c_key, key.length(), alloc);
- valueVal.SetString(c_val, value.length(), alloc);
+ keyVal.SetString(c_key, gsl::narrow<rapidjson::SizeType>(key.length()),
alloc);
+ valueVal.SetString(c_val, gsl::narrow<rapidjson::SizeType>(value.length()),
alloc);
parent.AddMember(keyVal, valueVal, alloc);
}
rapidjson::Value getStringValue(const std::string& value,
rapidjson::Document::AllocatorType& alloc) {
rapidjson::Value Val;
- Val.SetString(value.c_str(), value.length(), alloc);
+ Val.SetString(value.c_str(),
gsl::narrow<rapidjson::SizeType>(value.length()), alloc);
return Val;
}
template<size_t N>
rapidjson::Value getStringValue(const utils::SmallString<N>& value,
rapidjson::Document::AllocatorType& alloc) {
rapidjson::Value Val;
- Val.SetString(value.c_str(), value.length(), alloc);
+ Val.SetString(value.c_str(),
gsl::narrow<rapidjson::SizeType>(value.length()), alloc);
return Val;
}
void appendJsonStr(const std::string& value, rapidjson::Value& parent,
rapidjson::Document::AllocatorType& alloc) {
rapidjson::Value valueVal;
- valueVal.SetString(value.c_str(), value.length(), alloc);
+ valueVal.SetString(value.c_str(),
gsl::narrow<rapidjson::SizeType>(value.length()), alloc);
parent.PushBack(valueVal, alloc);
}
template<size_t N>
void appendJsonStr(const utils::SmallString<N>& value, rapidjson::Value&
parent, rapidjson::Document::AllocatorType& alloc) {
rapidjson::Value valueVal;
- valueVal.SetString(value.c_str(), value.length(), alloc);
+ valueVal.SetString(value.c_str(),
gsl::narrow<rapidjson::SizeType>(value.length()), alloc);
parent.PushBack(valueVal, alloc);
}
@@ -144,7 +145,7 @@ void SiteToSiteProvenanceReportingTask::getJsonReport(const
std::shared_ptr<core
recordJson.AddMember("childIds", childUuidJson, alloc);
rapidjson::Value applicationVal;
- applicationVal.SetString(ProvenanceAppStr, std::strlen(ProvenanceAppStr));
+ applicationVal.SetString(ProvenanceAppStr,
gsl::narrow<rapidjson::SizeType>(std::strlen(ProvenanceAppStr)));
recordJson.AddMember("application", applicationVal, alloc);
array.PushBack(recordJson, alloc);
diff --git a/libminifi/src/core/yaml/YamlConfiguration.cpp
b/libminifi/src/core/yaml/YamlConfiguration.cpp
index 2f33f0b..2a9b17d 100644
--- a/libminifi/src/core/yaml/YamlConfiguration.cpp
+++ b/libminifi/src/core/yaml/YamlConfiguration.cpp
@@ -134,8 +134,7 @@ void YamlConfiguration::parseProcessorNodeYaml(YAML::Node
processorsNode, core::
auto lastOfIdx = procCfg.javaClass.find_last_of(".");
if (lastOfIdx != std::string::npos) {
lastOfIdx++; // if a value is found, increment to move beyond the .
- int nameLength = procCfg.javaClass.length() - lastOfIdx;
- std::string processorName = procCfg.javaClass.substr(lastOfIdx,
nameLength);
+ std::string processorName = procCfg.javaClass.substr(lastOfIdx);
processor = this->createProcessor(processorName, procCfg.javaClass,
uuid);
} else {
// Allow unqualified class names for core processors
@@ -498,8 +497,7 @@ void YamlConfiguration::parseControllerServices(YAML::Node
*controllerServicesNo
auto lastOfIdx = type.find_last_of(".");
if (lastOfIdx != std::string::npos) {
lastOfIdx++; // if a value is found, increment to move beyond the
.
- int nameLength = type.length() - lastOfIdx;
- type = type.substr(lastOfIdx, nameLength);
+ type = type.substr(lastOfIdx);
}
auto name = controllerServiceNode["name"].as<std::string>();
diff --git a/libminifi/src/io/BufferStream.cpp
b/libminifi/src/io/BufferStream.cpp
index 3816ce9..6d3ebab 100644
--- a/libminifi/src/io/BufferStream.cpp
+++ b/libminifi/src/io/BufferStream.cpp
@@ -18,7 +18,9 @@
#include <cstdint>
#include <algorithm>
#include <cstring>
+
#include "io/BufferStream.h"
+#include "utils/gsl.h"
namespace org {
namespace apache {
@@ -36,7 +38,8 @@ int BufferStream::write(const uint8_t *value, int size) {
int BufferStream::read(uint8_t *buf, int len) {
gsl_Expects(len >= 0);
- len = (std::min<uint64_t>)(len, buffer_.size() - readOffset_);
+ int bytes_available_in_buffer = gsl::narrow<int>(buffer_.size() -
readOffset_);
+ len = std::min(len, bytes_available_in_buffer);
auto begin = buffer_.begin() + readOffset_;
std::copy(begin, begin + len, buf);
diff --git a/libminifi/src/io/InputStream.cpp b/libminifi/src/io/InputStream.cpp
index 9905abf..cdd101e 100644
--- a/libminifi/src/io/InputStream.cpp
+++ b/libminifi/src/io/InputStream.cpp
@@ -21,6 +21,7 @@
#include <string>
#include <algorithm>
#include "io/InputStream.h"
+#include "utils/gsl.h"
#include "utils/OptionalUtils.h"
namespace org {
@@ -30,7 +31,7 @@ namespace minifi {
namespace io {
int InputStream::read(std::vector<uint8_t>& buffer, int len) {
- if (buffer.size() < len) {
+ if (buffer.size() < gsl::narrow<size_t>(len)) {
buffer.resize(len);
}
int ret = read(buffer.data(), len);
@@ -83,7 +84,8 @@ int InputStream::read(std::string &str, bool widen) {
}
std::vector<uint8_t> buffer(len);
- if (read(buffer.data(), len) != len) {
+ uint32_t bytes_read = gsl::narrow<uint32_t>(read(buffer.data(), len));
+ if (bytes_read != len) {
return -1;
}
diff --git a/libminifi/src/io/OutputStream.cpp
b/libminifi/src/io/OutputStream.cpp
index 4f82c63..355cea7 100644
--- a/libminifi/src/io/OutputStream.cpp
+++ b/libminifi/src/io/OutputStream.cpp
@@ -22,6 +22,7 @@
#include <string>
#include <algorithm>
#include "io/OutputStream.h"
+#include "utils/gsl.h"
namespace org {
namespace apache {
@@ -30,7 +31,7 @@ namespace minifi {
namespace io {
int OutputStream::write(const std::vector<uint8_t>& buffer, int len) {
- if (buffer.size() < len) {
+ if (buffer.size() < gsl::narrow<size_t>(len)) {
return -1;
}
return write(buffer.data(), len);
@@ -46,11 +47,11 @@ int OutputStream::write(const utils::Identifier &value) {
}
int OutputStream::write(const std::string& str, bool widen) {
- return write_str(str.c_str(), str.length(), widen);
+ return write_str(str.c_str(), gsl::narrow<uint32_t>(str.length()), widen);
}
int OutputStream::write(const char* str, bool widen) {
- return write_str(str, std::strlen(str), widen);
+ return write_str(str, gsl::narrow<uint32_t>(std::strlen(str)), widen);
}
int OutputStream::write_str(const char* str, uint32_t len, bool widen) {
diff --git a/libminifi/src/io/ZlibStream.cpp b/libminifi/src/io/ZlibStream.cpp
index 8e58dc5..e944f3a 100644
--- a/libminifi/src/io/ZlibStream.cpp
+++ b/libminifi/src/io/ZlibStream.cpp
@@ -18,6 +18,8 @@
#include "io/ZlibStream.h"
#include "Exception.h"
+#include "utils/gsl.h"
+
namespace org {
namespace apache {
namespace nifi {
@@ -81,7 +83,7 @@ int ZlibCompressStream::write(const uint8_t* value, int size)
{
logger_->log_trace("writeData has %u B of input data left",
strm_.avail_in);
strm_.next_out = outputBuffer_.data();
- strm_.avail_out = outputBuffer_.size();
+ strm_.avail_out = gsl::narrow<uInt>(outputBuffer_.size());
int flush = value == nullptr ? Z_FINISH : Z_NO_FLUSH;
logger_->log_trace("calling deflate with flush %d", flush);
@@ -92,7 +94,7 @@ int ZlibCompressStream::write(const uint8_t* value, int size)
{
state_ = ZlibStreamState::ERRORED;
return -1;
}
- int output_size = outputBuffer_.size() - strm_.avail_out;
+ int output_size = gsl::narrow<int>(outputBuffer_.size() - strm_.avail_out);
logger_->log_trace("deflate produced %d B of output data", output_size);
if (output_->write(outputBuffer_.data(), output_size) != output_size) {
logger_->log_error("Failed to write to underlying stream");
@@ -149,7 +151,7 @@ int ZlibDecompressStream::write(const uint8_t* value, int
size) {
logger_->log_trace("writeData has %u B of input data left",
strm_.avail_in);
strm_.next_out = outputBuffer_.data();
- strm_.avail_out = outputBuffer_.size();
+ strm_.avail_out = gsl::narrow<uInt>(outputBuffer_.size());
ret = inflate(&strm_, Z_NO_FLUSH);
if (ret == Z_STREAM_ERROR ||
@@ -160,7 +162,7 @@ int ZlibDecompressStream::write(const uint8_t* value, int
size) {
state_ = ZlibStreamState::ERRORED;
return -1;
}
- int output_size = outputBuffer_.size() - strm_.avail_out;
+ int output_size = gsl::narrow<int>(outputBuffer_.size() - strm_.avail_out);
logger_->log_trace("deflate produced %d B of output data", output_size);
if (output_->write(outputBuffer_.data(), output_size) != output_size) {
logger_->log_error("Failed to write to underlying stream");
diff --git a/libminifi/src/provenance/Provenance.cpp
b/libminifi/src/provenance/Provenance.cpp
index 5bedec6..bff5e1d 100644
--- a/libminifi/src/provenance/Provenance.cpp
+++ b/libminifi/src/provenance/Provenance.cpp
@@ -17,16 +17,19 @@
*/
#include "provenance/Provenance.h"
+
#include <cstdint>
#include <memory>
#include <string>
#include <vector>
#include <list>
+
#include "core/Repository.h"
#include "io/BufferStream.h"
#include "core/logging/Logger.h"
#include "core/Relationship.h"
#include "FlowController.h"
+#include "utils/gsl.h"
namespace org {
namespace apache {
@@ -71,7 +74,7 @@ bool ProvenanceEventRecord::DeSerialize(const
std::shared_ptr<core::Serializable
logger_->log_debug("NiFi Provenance Read event %s", getUUIDStr());
}
- org::apache::nifi::minifi::io::BufferStream stream((const uint8_t*)
value.data(), value.length());
+ org::apache::nifi::minifi::io::BufferStream stream((const uint8_t*)
value.data(), gsl::narrow<int>(value.length()));
ret = DeSerialize(stream);
@@ -139,7 +142,7 @@ bool
ProvenanceEventRecord::Serialize(org::apache::nifi::minifi::io::BufferStrea
}
// write flow attributes
- uint32_t numAttributes = this->_attributes.size();
+ uint32_t numAttributes = gsl::narrow<uint32_t>(this->_attributes.size());
ret = outStream.write(numAttributes);
if (ret != 4) {
return false;
@@ -178,8 +181,8 @@ bool
ProvenanceEventRecord::Serialize(org::apache::nifi::minifi::io::BufferStrea
if (this->_eventType == ProvenanceEventRecord::FORK || this->_eventType ==
ProvenanceEventRecord::CLONE || this->_eventType ==
ProvenanceEventRecord::JOIN) {
// write UUIDs
- uint32_t number = this->_parentUuids.size();
- ret = outStream.write(number);
+ uint32_t parent_uuids_count =
gsl::narrow<uint32_t>(this->_parentUuids.size());
+ ret = outStream.write(parent_uuids_count);
if (ret != 4) {
return false;
}
@@ -189,8 +192,8 @@ bool
ProvenanceEventRecord::Serialize(org::apache::nifi::minifi::io::BufferStrea
return false;
}
}
- number = this->_childrenUuids.size();
- ret = outStream.write(number);
+ uint32_t children_uuids_count =
gsl::narrow<uint32_t>(this->_childrenUuids.size());
+ ret = outStream.write(children_uuids_count);
if (ret != 4) {
return false;
}
@@ -234,7 +237,7 @@ bool ProvenanceEventRecord::Serialize(const
std::shared_ptr<core::SerializableCo
bool ProvenanceEventRecord::DeSerialize(const uint8_t *buffer, const size_t
bufferSize) {
int ret;
- org::apache::nifi::minifi::io::BufferStream outStream(buffer, bufferSize);
+ org::apache::nifi::minifi::io::BufferStream outStream(buffer,
gsl::narrow<unsigned int>(bufferSize));
ret = outStream.read(uuid_);
if (ret <= 0) {
diff --git a/libminifi/src/serialization/FlowFileV3Serializer.cpp
b/libminifi/src/serialization/FlowFileV3Serializer.cpp
index 34a1087..1fa30a7 100644
--- a/libminifi/src/serialization/FlowFileV3Serializer.cpp
+++ b/libminifi/src/serialization/FlowFileV3Serializer.cpp
@@ -18,6 +18,7 @@
#include "serialization/FlowFileV3Serializer.h"
#include "core/ProcessSession.h"
+#include "utils/gsl.h"
namespace org {
namespace apache {
@@ -53,11 +54,11 @@ int FlowFileV3Serializer::writeString(const std::string
&str, const std::shared_
return ret;
}
sum += ret;
- ret = out->write(const_cast<uint8_t*>(reinterpret_cast<const
uint8_t*>(str.data())), str.length());
+ ret = out->write(const_cast<uint8_t*>(reinterpret_cast<const
uint8_t*>(str.data())), gsl::narrow<int>(str.length()));
if (ret < 0) {
return ret;
}
- if (ret != str.length()) {
+ if (gsl::narrow<size_t>(ret) != str.length()) {
return -1;
}
sum += ret;
diff --git a/libminifi/src/sitetosite/RawSocketProtocol.cpp
b/libminifi/src/sitetosite/RawSocketProtocol.cpp
index 5f1b55c..7ea213f 100644
--- a/libminifi/src/sitetosite/RawSocketProtocol.cpp
+++ b/libminifi/src/sitetosite/RawSocketProtocol.cpp
@@ -31,6 +31,7 @@
#include "sitetosite/RawSocketProtocol.h"
#include "io/CRCStream.h"
#include "sitetosite/Peer.h"
+#include "utils/gsl.h"
namespace org {
namespace apache {
@@ -262,7 +263,7 @@ bool RawSiteToSiteClient::handShake() {
}
}
- uint32_t size = properties.size();
+ uint32_t size = gsl::narrow<uint32_t>(properties.size());
ret = peer_->write(size);
if (ret <= 0) {
return false;
diff --git a/libminifi/src/sitetosite/SiteToSiteClient.cpp
b/libminifi/src/sitetosite/SiteToSiteClient.cpp
index 59d936b..2eabfa1 100644
--- a/libminifi/src/sitetosite/SiteToSiteClient.cpp
+++ b/libminifi/src/sitetosite/SiteToSiteClient.cpp
@@ -16,9 +16,13 @@
* limitations under the License.
*/
#include "sitetosite/SiteToSiteClient.h"
+
#include <map>
#include <string>
#include <memory>
+
+#include "utils/gsl.h"
+
namespace org {
namespace apache {
namespace nifi {
@@ -60,7 +64,7 @@ int SiteToSiteClient::readResponse(const
std::shared_ptr<Transaction>& /*transac
if (ret <= 0)
return -1;
}
- return 3 + message.size();
+ return gsl::narrow<int>(3 + message.size());
}
void SiteToSiteClient::deleteTransaction(const utils::Identifier&
transactionID) {
@@ -441,7 +445,7 @@ int16_t SiteToSiteClient::send(const utils::Identifier&
transactionID, DataPacke
}
}
// start to read the packet
- uint32_t numAttributes = packet->_attributes.size();
+ uint32_t numAttributes = gsl::narrow<uint32_t>(packet->_attributes.size());
ret = transaction->getStream().write(numAttributes);
if (ret != 4) {
return -1;
diff --git a/libminifi/src/utils/ByteArrayCallback.cpp
b/libminifi/src/utils/ByteArrayCallback.cpp
index c4545ec..33c9634 100644
--- a/libminifi/src/utils/ByteArrayCallback.cpp
+++ b/libminifi/src/utils/ByteArrayCallback.cpp
@@ -16,10 +16,14 @@
* limitations under the License.
*/
#include "utils/ByteArrayCallback.h"
+
#include <vector>
#include <utility>
#include <string>
#include <memory>
+
+#include "utils/gsl.h"
+
namespace org {
namespace apache {
namespace nifi {
@@ -31,7 +35,7 @@ int64_t ByteOutputCallback::process(const
std::shared_ptr<io::BaseStream>& strea
if (stream->size() > 0) {
std::unique_ptr<char> buffer = std::unique_ptr<char>(new
char[stream->size()]);
readFully(buffer.get(), stream->size());
- stream->read(reinterpret_cast<uint8_t*>(buffer.get()), stream->size());
+ stream->read(reinterpret_cast<uint8_t*>(buffer.get()),
gsl::narrow<int>(stream->size()));
return stream->size();
}
return size_.load();
@@ -41,7 +45,7 @@ int64_t StreamOutputCallback::process(const
std::shared_ptr<io::BaseStream>& str
stream->seek(0);
std::unique_ptr<char> buffer = std::unique_ptr<char>(new char[size_.load()]);
auto written = readFully(buffer.get(), size_);
- stream->write(reinterpret_cast<uint8_t*>(buffer.get()), written);
+ stream->write(reinterpret_cast<uint8_t*>(buffer.get()),
gsl::narrow<int>(written));
return stream->size();
}
diff --git a/libminifi/src/utils/Environment.cpp
b/libminifi/src/utils/Environment.cpp
index 35a7763..edc426f 100644
--- a/libminifi/src/utils/Environment.cpp
+++ b/libminifi/src/utils/Environment.cpp
@@ -28,6 +28,8 @@
#include <vector>
#include <iostream>
+#include "utils/gsl.h"
+
namespace org {
namespace apache {
namespace nifi {
@@ -52,7 +54,7 @@ std::pair<bool, std::string>
Environment::getEnvironmentVariable(const char* nam
// GetEnvironmentVariableA does not set last error to 0 on success, so an
error from a pervious API call would influence the GetLastError() later,
// so we set the last error to 0 before calling
SetLastError(ERROR_SUCCESS);
- uint32_t ret = GetEnvironmentVariableA(name, buffer.data(), buffer.size());
+ uint32_t ret = GetEnvironmentVariableA(name, buffer.data(),
gsl::narrow<DWORD>(buffer.size()));
if (ret > 0U) {
exists = true;
value = std::string(buffer.data(), ret);
@@ -118,7 +120,7 @@ std::string Environment::getCurrentWorkingDirectory() {
// the return value specifies the required size of the buffer,
// in characters, including the null-terminating character."
while (true) {
- len = GetCurrentDirectoryA(buffer.size(), buffer.data());
+ len = GetCurrentDirectoryA(gsl::narrow<DWORD>(buffer.size()),
buffer.data());
if (len < buffer.size()) {
break;
}
diff --git a/libminifi/src/utils/StringUtils.cpp
b/libminifi/src/utils/StringUtils.cpp
index e80adf1..7a02720 100644
--- a/libminifi/src/utils/StringUtils.cpp
+++ b/libminifi/src/utils/StringUtils.cpp
@@ -94,37 +94,36 @@ bool StringUtils::StringToFloat(std::string input, float
&output, FailurePolicy
return true;
}
-std::string StringUtils::replaceEnvironmentVariables(std::string&
original_string) {
- int32_t beg_seq = 0;
- int32_t end_seq = 0;
- std::string source_string = original_string;
+std::string StringUtils::replaceEnvironmentVariables(std::string
source_string) {
+ std::string::size_type beg_seq = 0;
+ std::string::size_type end_seq = 0;
do {
beg_seq = source_string.find("${", beg_seq);
+ if (beg_seq == std::string::npos) {
+ break;
+ }
if (beg_seq > 0 && source_string.at(beg_seq - 1) == '\\') {
beg_seq += 2;
continue;
}
- if (beg_seq < 0)
- break;
end_seq = source_string.find("}", beg_seq + 2);
- if (end_seq < 0)
+ if (end_seq == std::string::npos) {
break;
- if (end_seq - (beg_seq + 2) < 0) {
- beg_seq += 2;
- continue;
}
- const std::string env_field = source_string.substr(beg_seq + 2, end_seq -
(beg_seq + 2));
- const std::string env_field_wrapped = source_string.substr(beg_seq,
end_seq + 1);
- if (env_field.empty()) {
+ if (end_seq <= beg_seq + 2) {
+ beg_seq += 2;
continue;
}
+ auto env_var_length = end_seq - (beg_seq + 2);
+ const std::string env_var = source_string.substr(beg_seq + 2,
env_var_length);
+ const std::string env_var_wrapped = source_string.substr(beg_seq,
env_var_length + 3);
std::string env_value;
- std::tie(std::ignore, env_value) =
utils::Environment::getEnvironmentVariable(env_field.c_str());
+ std::tie(std::ignore, env_value) =
utils::Environment::getEnvironmentVariable(env_var.c_str());
- source_string = replaceAll(source_string, env_field_wrapped, env_value);
+ source_string = replaceAll(source_string, env_var_wrapped, env_value);
beg_seq = 0; // restart
- } while (beg_seq >= 0);
+ } while (beg_seq < source_string.size());
source_string = replaceAll(source_string, "\\$", "$");
diff --git a/libminifi/src/utils/file/PathUtils.cpp
b/libminifi/src/utils/file/PathUtils.cpp
index 394c2e2..4923845 100644
--- a/libminifi/src/utils/file/PathUtils.cpp
+++ b/libminifi/src/utils/file/PathUtils.cpp
@@ -64,7 +64,7 @@ std::string getFullPath(const std::string& path) {
std::vector<char> buffer(MAX_PATH);
uint32_t len = 0U;
while (true) {
- len = GetFullPathNameA(path.c_str(), buffer.size(), buffer.data(), nullptr
/*lpFilePart*/);
+ len = GetFullPathNameA(path.c_str(), gsl::narrow<DWORD>(buffer.size()),
buffer.data(), nullptr /*lpFilePart*/);
if (len < buffer.size()) {
break;
}
diff --git a/libminifi/src/utils/tls/TLSUtils.cpp
b/libminifi/src/utils/tls/TLSUtils.cpp
index 046be91..24be2e7 100644
--- a/libminifi/src/utils/tls/TLSUtils.cpp
+++ b/libminifi/src/utils/tls/TLSUtils.cpp
@@ -20,6 +20,7 @@
#include <cstring>
#include <string>
+#include "utils/gsl.h"
#include "utils/StringUtils.h"
namespace org {
@@ -45,7 +46,7 @@ int pemPassWordCb(char *buf, int size, int /*rwflag*/, void
*userdata) {
// a null terminator. Per their documentation:
// "The actual length of the password must be returned to the calling
function. "
memset(buf, 0x00, size);
- return pass.copy(buf, size);
+ return gsl::narrow<int>(pass.copy(buf, size));
}
return -1;
}
diff --git a/libminifi/test/BufferReader.h b/libminifi/test/BufferReader.h
index 783c95b..2b4bf73 100644
--- a/libminifi/test/BufferReader.h
+++ b/libminifi/test/BufferReader.h
@@ -20,6 +20,7 @@
#define NIFI_MINIFI_CPP_BUFFERREADER_H
#include "FlowFileRecord.h"
+#include "utils/gsl.h"
class BufferReader : public org::apache::nifi::minifi::InputStreamCallback {
public:
@@ -30,7 +31,7 @@ class BufferReader : public
org::apache::nifi::minifi::InputStreamCallback {
std::size_t remaining_len = len;
int total_read = 0;
while (remaining_len > 0) {
- auto ret = input.read(tmpBuffer, std::min(remaining_len,
sizeof(tmpBuffer)));
+ auto ret = input.read(tmpBuffer,
gsl::narrow<int>(std::min(remaining_len, sizeof(tmpBuffer))));
if (ret == 0) break;
if (ret < 0) return ret;
remaining_len -= ret;
diff --git a/libminifi/test/archive-tests/MergeFileTests.cpp
b/libminifi/test/archive-tests/MergeFileTests.cpp
index 384f9f1..60e233f 100644
--- a/libminifi/test/archive-tests/MergeFileTests.cpp
+++ b/libminifi/test/archive-tests/MergeFileTests.cpp
@@ -39,6 +39,7 @@
#include "serialization/FlowFileV3Serializer.h"
#include "serialization/PayloadSerializer.h"
#include "../Utils.h"
+#include "utils/gsl.h"
std::string FLOW_FILE;
std::string EXPECT_MERGE_CONTENT_FIRST;
@@ -87,7 +88,7 @@ class FixedBuffer : public minifi::InputStreamCallback {
REQUIRE(size_ + len <= capacity_);
int total_read = 0;
do {
- auto ret = input.read(end(), len);
+ auto ret = input.read(end(), gsl::narrow<int>(len));
if (ret == 0) break;
if (ret < 0) return ret;
size_ += ret;
@@ -111,7 +112,7 @@ std::vector<FixedBuffer> read_archives(const FixedBuffer&
input) {
public:
explicit ArchiveEntryReader(archive* arch) : arch(arch) {}
int read(uint8_t* out, std::size_t len) {
- return archive_read_data(arch, out, len);
+ return gsl::narrow<int>(archive_read_data(arch, out, len));
}
private:
archive* arch;
@@ -677,7 +678,7 @@ TEST_CASE_METHOD(MergeTestController, "Test Merge File
Attributes Keeping All Un
}
void writeString(const std::string& str, const
std::shared_ptr<minifi::io::BaseStream>& out) {
- out->write(const_cast<uint8_t*>(reinterpret_cast<const
uint8_t*>(str.data())), str.length());
+ out->write(const_cast<uint8_t*>(reinterpret_cast<const
uint8_t*>(str.data())), gsl::narrow<int>(str.length()));
}
TEST_CASE("FlowFile serialization", "[testFlowFileSerialization]") {
diff --git a/libminifi/test/archive-tests/util/ArchiveTests.cpp
b/libminifi/test/archive-tests/util/ArchiveTests.cpp
index 5f94cf9..a643b26 100644
--- a/libminifi/test/archive-tests/util/ArchiveTests.cpp
+++ b/libminifi/test/archive-tests/util/ArchiveTests.cpp
@@ -19,15 +19,16 @@
*/
#include "ArchiveTests.h"
+#include <archive.h>
+#include <archive_entry.h>
+
#include <algorithm>
#include <set>
#include <string>
#include <utility>
-#include <archive.h> // NOLINT
-#include <archive_entry.h> // NOLINT
-
#include "../../TestBase.h"
+#include "utils/gsl.h"
TAE_MAP_T build_test_archive_map(int NUM_FILES, const char** FILE_NAMES, const
char** FILE_CONTENT) {
TAE_MAP_T test_entries;
@@ -138,13 +139,12 @@ bool check_archive_contents(std::string path, TAE_MAP_T
entries, bool check_attr
REQUIRE(size == test_entry.size);
if (size > 0) {
- int rlen, nlen = 0;
+ size_t nlen = 0;
std::vector<char> buf(size);
bool read_ok = true;
for (;;) {
- rlen = archive_read_data(a, buf.data(), size);
- nlen += rlen;
+ const auto rlen = archive_read_data(a, buf.data(), size);
if (rlen == 0)
break;
if (rlen < 0) {
@@ -152,6 +152,7 @@ bool check_archive_contents(std::string path, TAE_MAP_T
entries, bool check_attr
read_ok = false;
break;
}
+ nlen += rlen;
}
if (read_ok) {
diff --git a/libminifi/test/persistence-tests/PersistenceTests.cpp
b/libminifi/test/persistence-tests/PersistenceTests.cpp
index 962ab40..7919426 100644
--- a/libminifi/test/persistence-tests/PersistenceTests.cpp
+++ b/libminifi/test/persistence-tests/PersistenceTests.cpp
@@ -34,6 +34,7 @@
#include "../test/BufferReader.h"
#include "core/repository/VolatileFlowFileRepository.h"
#include "../../extensions/rocksdb-repos/DatabaseContentRepository.h"
+#include "utils/gsl.h"
#include "utils/IntegrationTestUtils.h"
using Connection = minifi::Connection;
@@ -95,7 +96,7 @@ struct TestFlow{
processor->onSchedule(processorContext.get(), new
core::ProcessSessionFactory(processorContext));
}
std::shared_ptr<core::FlowFile> write(const std::string& data) {
- minifi::io::BufferStream stream(reinterpret_cast<const
uint8_t*>(data.c_str()), data.length());
+ minifi::io::BufferStream stream(reinterpret_cast<const
uint8_t*>(data.c_str()), gsl::narrow<int>(data.length()));
core::ProcessSession sessionGenFlowFile(inputContext);
std::shared_ptr<core::FlowFile> flow =
std::static_pointer_cast<core::FlowFile>(sessionGenFlowFile.create());
sessionGenFlowFile.importFrom(stream, flow);
@@ -246,7 +247,7 @@ class ContentUpdaterProcessor : public core::Processor{
void onTrigger(core::ProcessContext* /*context*/, core::ProcessSession
*session) override {
auto ff = session->get();
std::string data = "<override>";
- minifi::io::BufferStream stream(reinterpret_cast<const
uint8_t*>(data.c_str()), data.length());
+ minifi::io::BufferStream stream(reinterpret_cast<const
uint8_t*>(data.c_str()), gsl::narrow<int>(data.length()));
session->importFrom(stream, ff);
session->transfer(ff, {"success", "d"});
}
diff --git a/libminifi/test/rocksdb-tests/ContentSessionTests.cpp
b/libminifi/test/rocksdb-tests/ContentSessionTests.cpp
index ecc987c..0b58d0d 100644
--- a/libminifi/test/rocksdb-tests/ContentSessionTests.cpp
+++ b/libminifi/test/rocksdb-tests/ContentSessionTests.cpp
@@ -25,6 +25,7 @@
#include "DatabaseContentRepository.h"
#include "FlowFileRecord.h"
#include "../TestBase.h"
+#include "utils/gsl.h"
template<typename ContentRepositoryClass>
class ContentSessionController : public TestController {
@@ -46,7 +47,8 @@ class ContentSessionController : public TestController {
};
const std::shared_ptr<minifi::io::BaseStream>& operator<<(const
std::shared_ptr<minifi::io::BaseStream>& stream, const std::string& str) {
- REQUIRE(stream->write(const_cast<uint8_t*>(reinterpret_cast<const
uint8_t*>(str.data())), str.length()) == str.length());
+ int length = gsl::narrow<int>(str.length());
+ REQUIRE(stream->write(const_cast<uint8_t*>(reinterpret_cast<const
uint8_t*>(str.data())), length) == length);
return stream;
}
diff --git a/libminifi/test/rocksdb-tests/RepoTests.cpp
b/libminifi/test/rocksdb-tests/RepoTests.cpp
index 6f21ce1..9248dc8 100644
--- a/libminifi/test/rocksdb-tests/RepoTests.cpp
+++ b/libminifi/test/rocksdb-tests/RepoTests.cpp
@@ -31,6 +31,7 @@
#include "properties/Configure.h"
#include "../unit/ProvenanceTestHelper.h"
#include "../TestBase.h"
+#include "utils/gsl.h"
#include "utils/IntegrationTestUtils.h"
namespace {
@@ -292,7 +293,7 @@ TEST_CASE("Test FlowFile Restore", "[TestFFR6]") {
prov_repo, ff_repository, config, std::move(flowConfig), content_repo,
"", true);
std::string data = "banana";
- minifi::io::BufferStream content(reinterpret_cast<const
uint8_t*>(data.c_str()), data.length());
+ minifi::io::BufferStream content(reinterpret_cast<const
uint8_t*>(data.c_str()), gsl::narrow<int>(data.length()));
/**
* Currently it is the Connection's responsibility to persist the incoming
diff --git a/libminifi/test/unit/CRCTests.cpp b/libminifi/test/unit/CRCTests.cpp
index 6880eee..17c62da 100644
--- a/libminifi/test/unit/CRCTests.cpp
+++ b/libminifi/test/unit/CRCTests.cpp
@@ -21,6 +21,7 @@
#include "io/CRCStream.h"
#include "io/BufferStream.h"
#include "../TestBase.h"
+#include "utils/gsl.h"
TEST_CASE("Test CRC1", "[testcrc1]") {
org::apache::nifi::minifi::io::BufferStream base;
@@ -34,7 +35,7 @@ TEST_CASE("Test CRC2", "[testcrc2]") {
org::apache::nifi::minifi::io::CRCStream<org::apache::nifi::minifi::io::BaseStream>
test(gsl::make_not_null(&base));
std::string fox = "the quick brown fox jumped over the brown fox";
std::vector<uint8_t> charvect(fox.begin(), fox.end());
- test.write(charvect, charvect.size());
+ test.write(charvect, gsl::narrow<int>(charvect.size()));
REQUIRE(1922388889 == test.getCRC());
}
@@ -73,8 +74,8 @@ TEST_CASE("CRCStream with initial crc = 0 is the same as
without initial crc", "
std::vector<uint8_t> textVector1(textString.begin(), textString.end());
std::vector<uint8_t> textVector2(textString.begin(), textString.end());
- test_noinit.write(textVector1, textVector1.size());
- test_initzero.write(textVector2, textVector2.size());
+ test_noinit.write(textVector1, gsl::narrow<int>(textVector1.size()));
+ test_initzero.write(textVector2, gsl::narrow<int>(textVector2.size()));
REQUIRE(test_noinit.getCRC() == test_initzero.getCRC());
}
@@ -84,17 +85,17 @@ TEST_CASE("CRCStream: one long write is the same as writing
in two pieces", "[in
org::apache::nifi::minifi::io::BufferStream base_full;
org::apache::nifi::minifi::io::CRCStream<org::apache::nifi::minifi::io::BaseStream>
test_full(gsl::make_not_null(&base_full), 0);
std::vector<uint8_t> textVector_full(textString.begin(), textString.end());
- test_full.write(textVector_full, textVector_full.size());
+ test_full.write(textVector_full, gsl::narrow<int>(textVector_full.size()));
org::apache::nifi::minifi::io::BufferStream base_piece1;
org::apache::nifi::minifi::io::CRCStream<org::apache::nifi::minifi::io::BaseStream>
test_piece1(gsl::make_not_null(&base_piece1), 0);
std::vector<uint8_t> textVector_piece1(textString.begin(),
textString.begin() + 15);
- test_piece1.write(textVector_piece1, textVector_piece1.size());
+ test_piece1.write(textVector_piece1,
gsl::narrow<int>(textVector_piece1.size()));
org::apache::nifi::minifi::io::BufferStream base_piece2;
org::apache::nifi::minifi::io::CRCStream<org::apache::nifi::minifi::io::BaseStream>
test_piece2(gsl::make_not_null(&base_piece2), test_piece1.getCRC());
std::vector<uint8_t> textVector_piece2(textString.begin() + 15,
textString.end());
- test_piece2.write(textVector_piece2, textVector_piece2.size());
+ test_piece2.write(textVector_piece2,
gsl::narrow<int>(textVector_piece2.size()));
REQUIRE(test_full.getCRC() == test_piece2.getCRC());
}
diff --git a/libminifi/test/unit/EncryptionUtilsTests.cpp
b/libminifi/test/unit/EncryptionUtilsTests.cpp
index 977be35..934b889 100644
--- a/libminifi/test/unit/EncryptionUtilsTests.cpp
+++ b/libminifi/test/unit/EncryptionUtilsTests.cpp
@@ -73,7 +73,7 @@ TEST_CASE("EncryptionUtils can encrypt and decrypt strings
using the simplified
utils::crypto::Bytes key = utils::crypto::generateKey();
std::string plaintext = "my social security number is 914-52-5373";
- const auto base64_length = [](int raw_length) { return (raw_length + 2) / 3
* 4; };
+ const auto base64_length = [](size_t raw_length) { return (raw_length + 2) /
3 * 4; };
std::string encrypted_text = utils::crypto::encrypt(plaintext, key);
REQUIRE(encrypted_text.size() ==
diff --git a/libminifi/test/unit/FileStreamTests.cpp
b/libminifi/test/unit/FileStreamTests.cpp
index 66d2c15..5a74035 100644
--- a/libminifi/test/unit/FileStreamTests.cpp
+++ b/libminifi/test/unit/FileStreamTests.cpp
@@ -23,6 +23,7 @@
#include "io/FileStream.h"
#include "../TestBase.h"
+#include "utils/gsl.h"
TEST_CASE("TestFileOverWrite", "[TestFiles]") {
TestController testController;
@@ -39,7 +40,7 @@ TEST_CASE("TestFileOverWrite", "[TestFiles]") {
minifi::io::FileStream stream(path, 0, true);
std::vector<uint8_t> readBuffer;
- REQUIRE(stream.read(readBuffer, stream.size()) == stream.size());
+ REQUIRE(stream.read(readBuffer, gsl::narrow<int>(stream.size())) ==
stream.size());
uint8_t* data = readBuffer.data();
@@ -53,7 +54,7 @@ TEST_CASE("TestFileOverWrite", "[TestFiles]") {
std::vector<uint8_t> verifybuffer;
- REQUIRE(stream.read(verifybuffer, stream.size()) == stream.size());
+ REQUIRE(stream.read(verifybuffer, gsl::narrow<int>(stream.size())) ==
stream.size());
data = verifybuffer.data();
@@ -77,7 +78,7 @@ TEST_CASE("TestFileBadArgumentNoChange", "[TestLoader]") {
minifi::io::FileStream stream(path, 0, true);
std::vector<uint8_t> readBuffer;
- REQUIRE(stream.read(readBuffer, stream.size()) == stream.size());
+ REQUIRE(stream.read(readBuffer, gsl::narrow<int>(stream.size())) ==
stream.size());
uint8_t* data = readBuffer.data();
@@ -91,7 +92,7 @@ TEST_CASE("TestFileBadArgumentNoChange", "[TestLoader]") {
std::vector<uint8_t> verifybuffer;
- REQUIRE(stream.read(verifybuffer, stream.size()) == stream.size());
+ REQUIRE(stream.read(verifybuffer, gsl::narrow<int>(stream.size())) ==
stream.size());
data = verifybuffer.data();
@@ -115,7 +116,7 @@ TEST_CASE("TestFileBadArgumentNoChange2", "[TestLoader]") {
minifi::io::FileStream stream(path, 0, true);
std::vector<uint8_t> readBuffer;
- REQUIRE(stream.read(readBuffer, stream.size()) == stream.size());
+ REQUIRE(stream.read(readBuffer, gsl::narrow<int>(stream.size())) ==
stream.size());
uint8_t* data = readBuffer.data();
@@ -129,7 +130,7 @@ TEST_CASE("TestFileBadArgumentNoChange2", "[TestLoader]") {
std::vector<uint8_t> verifybuffer;
- REQUIRE(stream.read(verifybuffer, stream.size()) == stream.size());
+ REQUIRE(stream.read(verifybuffer, gsl::narrow<int>(stream.size())) ==
stream.size());
data = verifybuffer.data();
@@ -153,7 +154,7 @@ TEST_CASE("TestFileBadArgumentNoChange3", "[TestLoader]") {
minifi::io::FileStream stream(path, 0, true);
std::vector<uint8_t> readBuffer;
- REQUIRE(stream.read(readBuffer, stream.size()) == stream.size());
+ REQUIRE(stream.read(readBuffer, gsl::narrow<int>(stream.size())) ==
stream.size());
uint8_t* data = readBuffer.data();
@@ -167,7 +168,7 @@ TEST_CASE("TestFileBadArgumentNoChange3", "[TestLoader]") {
std::vector<uint8_t> verifybuffer;
- REQUIRE(stream.read(nullptr, stream.size()) == -1);
+ REQUIRE(stream.read(nullptr, gsl::narrow<int>(stream.size())) == -1);
data = verifybuffer.data();
@@ -191,7 +192,7 @@ TEST_CASE("TestFileBeyondEnd3", "[TestLoader]") {
minifi::io::FileStream stream(path, 0, true);
std::vector<uint8_t> readBuffer;
- REQUIRE(stream.read(readBuffer, stream.size()) == stream.size());
+ REQUIRE(stream.read(readBuffer, gsl::narrow<int>(stream.size())) ==
stream.size());
uint8_t* data = readBuffer.data();
@@ -226,7 +227,7 @@ TEST_CASE("TestFileExceedSize", "[TestLoader]") {
minifi::io::FileStream stream(path, 0, true);
std::vector<uint8_t> readBuffer;
- REQUIRE(stream.read(readBuffer, stream.size()) == stream.size());
+ REQUIRE(stream.read(readBuffer, gsl::narrow<int>(stream.size())) ==
stream.size());
uint8_t* data = readBuffer.data();
diff --git a/libminifi/test/unit/FlowFileSerializationTests.cpp
b/libminifi/test/unit/FlowFileSerializationTests.cpp
index d89e335..fef1327 100644
--- a/libminifi/test/unit/FlowFileSerializationTests.cpp
+++ b/libminifi/test/unit/FlowFileSerializationTests.cpp
@@ -24,6 +24,7 @@
#include "serialization/PayloadSerializer.h"
#include "core/FlowFile.h"
#include "../TestBase.h"
+#include "utils/gsl.h"
std::shared_ptr<minifi::FlowFileRecord> createEmptyFlowFile() {
auto flowFile = std::make_shared<minifi::FlowFileRecord>();
@@ -34,7 +35,7 @@ std::shared_ptr<minifi::FlowFileRecord> createEmptyFlowFile()
{
TEST_CASE("Payload Serializer", "[testPayload]") {
std::string content = "flowFileContent";
auto contentStream = std::make_shared<minifi::io::BufferStream>();
- contentStream->write(const_cast<uint8_t*>(reinterpret_cast<const
uint8_t*>(content.data())), content.length());
+ contentStream->write(const_cast<uint8_t*>(reinterpret_cast<const
uint8_t*>(content.data())), gsl::narrow<int>(content.length()));
auto result = std::make_shared<minifi::io::BufferStream>();
@@ -44,7 +45,7 @@ TEST_CASE("Payload Serializer", "[testPayload]") {
flowFile->addAttribute("second", "two");
minifi::PayloadSerializer serializer([&] (const
std::shared_ptr<core::FlowFile>&, minifi::InputStreamCallback* cb) {
- return cb->process(contentStream);
+ return gsl::narrow<int>(cb->process(contentStream));
});
serializer.serialize(flowFile, result);
@@ -56,7 +57,7 @@ TEST_CASE("Payload Serializer", "[testPayload]") {
TEST_CASE("FFv3 Serializer", "[testFFv3]") {
std::string content = "flowFileContent";
auto contentStream = std::make_shared<minifi::io::BufferStream>();
- contentStream->write(const_cast<uint8_t*>(reinterpret_cast<const
uint8_t*>(content.data())), content.length());
+ contentStream->write(const_cast<uint8_t*>(reinterpret_cast<const
uint8_t*>(content.data())), gsl::narrow<int>(content.length()));
auto result = std::make_shared<minifi::io::BufferStream>();
@@ -66,7 +67,7 @@ TEST_CASE("FFv3 Serializer", "[testFFv3]") {
flowFile->addAttribute("second", "two");
minifi::FlowFileV3Serializer serializer([&] (const
std::shared_ptr<core::FlowFile>&, minifi::InputStreamCallback* cb) {
- return cb->process(contentStream);
+ return gsl::narrow<int>(cb->process(contentStream));
});
serializer.serialize(flowFile, result);
diff --git a/libminifi/test/unit/LoggerConfigurationTests.cpp
b/libminifi/test/unit/LoggerConfigurationTests.cpp
index bdb16b9..5e2f03e 100644
--- a/libminifi/test/unit/LoggerConfigurationTests.cpp
+++ b/libminifi/test/unit/LoggerConfigurationTests.cpp
@@ -41,6 +41,7 @@ TEST_CASE("TestLoggerProperties::get_keys_of_type", "[test
get_keys_of_type]") {
REQUIRE(expected == actual);
}
+#ifndef WIN32
class TestLoggerConfiguration : public logging::LoggerConfiguration {
public:
static std::shared_ptr<logging::internal::LoggerNamespace>
initialize_namespaces(const std::shared_ptr<logging::LoggerProperties>
&logger_properties) {
@@ -50,7 +51,7 @@ class TestLoggerConfiguration : public
logging::LoggerConfiguration {
return
logging::LoggerConfiguration::get_logger(LogTestController::getInstance().logger_,
root_namespace, name, formatter);
}
};
-#ifndef WIN32
+
TEST_CASE("TestLoggerConfiguration::initialize_namespaces", "[test
initialize_namespaces]") {
TestController test_controller;
LogTestController &logTestController = LogTestController::getInstance();
diff --git a/libminifi/test/unit/MinifiConcurrentQueueTests.cpp
b/libminifi/test/unit/MinifiConcurrentQueueTests.cpp
index 1b0dc0f..42b4987 100644
--- a/libminifi/test/unit/MinifiConcurrentQueueTests.cpp
+++ b/libminifi/test/unit/MinifiConcurrentQueueTests.cpp
@@ -24,6 +24,7 @@
#include <set>
#include "../TestBase.h"
+#include "utils/gsl.h"
#include "utils/MinifiConcurrentQueue.h"
#include "utils/StringUtils.h"
#include "utils/IntegrationTestUtils.h"
@@ -121,7 +122,7 @@ namespace MinifiConcurrentQueueTestProducersConsumers {
while (queue.dequeueWait(s)) {
if (!std::count(results.begin(), results.end(), s)) {
results.push_back(s);
- results_size = results.size();
+ results_size = gsl::narrow<int>(results.size());
}
// The consumer is busy enqueing so noone is waiting for this ;(
queue.enqueue(std::move(s));
diff --git a/libminifi/test/unit/SiteToSiteHelper.h
b/libminifi/test/unit/SiteToSiteHelper.h
index 693ec31..b4d5e8f 100644
--- a/libminifi/test/unit/SiteToSiteHelper.h
+++ b/libminifi/test/unit/SiteToSiteHelper.h
@@ -22,6 +22,8 @@
#include "io/BufferStream.h"
#include "io/EndianCheck.h"
#include "core/Core.h"
+#include "utils/gsl.h"
+
/**
* Test repository
*/
@@ -37,7 +39,7 @@ class SiteToSiteResponder : public minifi::io::BaseStream {
}
void push_response(const std::string& resp) {
- server_responses_.write(reinterpret_cast<const uint8_t*>(resp.data()),
resp.length());
+ server_responses_.write(reinterpret_cast<const uint8_t*>(resp.data()),
gsl::narrow<int>(resp.length()));
}
int write(const uint8_t *value, int size) override {
diff --git a/libminifi/test/unit/StringUtilsTests.cpp
b/libminifi/test/unit/StringUtilsTests.cpp
index e76fa0e..2ecc8de 100644
--- a/libminifi/test/unit/StringUtilsTests.cpp
+++ b/libminifi/test/unit/StringUtilsTests.cpp
@@ -50,54 +50,24 @@ TEST_CASE("TestStringUtils::split4", "[test split
classname]") {
REQUIRE(expected ==
StringUtils::split(org::apache::nifi::minifi::core::getClassName<org::apache::nifi::minifi::utils::StringUtils>(),
"::"));
}
-TEST_CASE("TestStringUtils::testEnv1", "[test split classname]") {
- std::string test_string = "hello world ${blahblahnamenamenotexist}";
-
-
+TEST_CASE("StringUtils::replaceEnvironmentVariables works correctly",
"[replaceEnvironmentVariables]") {
utils::Environment::setEnvironmentVariable("blahblahnamenamenotexist",
"computer", 0);
- std::string expected = "hello world computer";
-
- REQUIRE(expected == StringUtils::replaceEnvironmentVariables(test_string));
-}
-
-TEST_CASE("TestStringUtils::testEnv2", "[test split classname]") {
- std::string test_string = "hello world ${blahblahnamenamenotexist";
-
- utils::Environment::setEnvironmentVariable("blahblahnamenamenotexist",
"computer");
-
- std::string expected = "hello world ${blahblahnamenamenotexist";
-
- REQUIRE(expected == StringUtils::replaceEnvironmentVariables(test_string));
-}
-
-TEST_CASE("TestStringUtils::testEnv3", "[test split classname]") {
- std::string test_string = "hello world $${blahblahnamenamenotexist}";
-
- utils::Environment::setEnvironmentVariable("blahblahnamenamenotexist",
"computer");
-
- std::string expected = "hello world $computer";
-
- REQUIRE(expected == StringUtils::replaceEnvironmentVariables(test_string));
-}
-
-TEST_CASE("TestStringUtils::testEnv4", "[test split classname]") {
- std::string test_string = "hello world \\${blahblahnamenamenotexist}";
-
- utils::Environment::setEnvironmentVariable("blahblahnamenamenotexist",
"computer");
-
- std::string expected = "hello world ${blahblahnamenamenotexist}";
-
- REQUIRE(expected == StringUtils::replaceEnvironmentVariables(test_string));
-}
-
-TEST_CASE("TestStringUtils::testEnv5", "[test split classname]") {
- // can't use blahblahnamenamenotexist because the
utils::Environment::setEnvironmentVariable in other functions may have already
set it
- std::string test_string = "hello world ${blahblahnamenamenotexist2}";
-
- std::string expected = "hello world ";
-
- REQUIRE(expected == StringUtils::replaceEnvironmentVariables(test_string));
+ REQUIRE("hello world computer" ==
StringUtils::replaceEnvironmentVariables("hello world
${blahblahnamenamenotexist}"));
+ REQUIRE("hello world ${blahblahnamenamenotexist" ==
StringUtils::replaceEnvironmentVariables("hello world
${blahblahnamenamenotexist"));
+ REQUIRE("hello world $computer" ==
StringUtils::replaceEnvironmentVariables("hello world
$${blahblahnamenamenotexist}"));
+ REQUIRE("hello world ${blahblahnamenamenotexist}" ==
StringUtils::replaceEnvironmentVariables("hello world
\\${blahblahnamenamenotexist}"));
+ REQUIRE("the computer costs $123" ==
StringUtils::replaceEnvironmentVariables("the ${blahblahnamenamenotexist} costs
\\$123"));
+ REQUIRE("computer bug" ==
StringUtils::replaceEnvironmentVariables("${blahblahnamenamenotexist} bug"));
+ REQUIRE("O computer! My computer!" ==
StringUtils::replaceEnvironmentVariables("O ${blahblahnamenamenotexist}! My
${blahblahnamenamenotexist}!"));
+
+ utils::Environment::setEnvironmentVariable("blahblahnamenamenotexist_2",
"no", 0);
+ REQUIRE("computer says 'no'" ==
StringUtils::replaceEnvironmentVariables("${blahblahnamenamenotexist} says
'${blahblahnamenamenotexist_2}'"));
+ REQUIRE("no computer can say no to computer nougats" ==
StringUtils::replaceEnvironmentVariables(
+ "${blahblahnamenamenotexist_2} ${blahblahnamenamenotexist} can say
${blahblahnamenamenotexist_2} to ${blahblahnamenamenotexist}
${blahblahnamenamenotexist_2}ugats"));
+
+ REQUIRE("hello world ${}" == StringUtils::replaceEnvironmentVariables("hello
world ${}"));
+ REQUIRE("hello world " == StringUtils::replaceEnvironmentVariables("hello
world ${blahblahnamenamenotexist_reallydoesnotexist}"));
}
TEST_CASE("TestStringUtils::testJoin", "[test string join]") {
diff --git a/libminifi/test/unit/ZlibStreamTests.cpp
b/libminifi/test/unit/ZlibStreamTests.cpp
index 7a81f06..3418448 100644
--- a/libminifi/test/unit/ZlibStreamTests.cpp
+++ b/libminifi/test/unit/ZlibStreamTests.cpp
@@ -21,6 +21,7 @@
#include <algorithm>
#include "../TestBase.h"
#include "io/ZlibStream.h"
+#include "utils/gsl.h"
#include "utils/StringUtils.h"
namespace io = org::apache::nifi::minifi::io;
@@ -34,13 +35,17 @@ TEST_CASE("gzip compression and decompression", "[basic]") {
SECTION("Empty") {
}
SECTION("Simple content in one write") {
- REQUIRE(strlen("foobar") ==
compressStream.write(reinterpret_cast<uint8_t*>(const_cast<char*>("foobar")),
strlen("foobar")));
+ int length = gsl::narrow<int>(strlen("foobar"));
+ REQUIRE(length ==
compressStream.write(reinterpret_cast<uint8_t*>(const_cast<char*>("foobar")),
length));
original += "foobar";
}
SECTION("Simple content in two writes") {
- REQUIRE(strlen("foo") ==
compressStream.write(reinterpret_cast<uint8_t*>(const_cast<char*>("foo")),
strlen("foo")));
+ int foo_length = gsl::narrow<int>(strlen("foo"));
+ REQUIRE(foo_length ==
compressStream.write(reinterpret_cast<uint8_t*>(const_cast<char*>("foo")),
foo_length));
original += "foo";
- REQUIRE(strlen("bar") ==
compressStream.write(reinterpret_cast<uint8_t*>(const_cast<char*>("bar")),
strlen("bar")));
+
+ int bar_length = gsl::narrow<int>(strlen("bar"));
+ REQUIRE(bar_length ==
compressStream.write(reinterpret_cast<uint8_t*>(const_cast<char*>("bar")),
bar_length));
original += "bar";
}
SECTION("Large data") {
@@ -50,7 +55,7 @@ TEST_CASE("gzip compression and decompression", "[basic]") {
for (size_t i = 0U; i < 1024U; i++) {
std::generate(buf.begin(), buf.end(), [&](){return dist(gen);});
original += std::string(reinterpret_cast<const char*>(buf.data()),
buf.size());
- REQUIRE(-1 != compressStream.write(buf.data(), buf.size()));
+ REQUIRE(-1 != compressStream.write(buf.data(),
gsl::narrow<int>(buf.size())));
}
}
@@ -66,7 +71,7 @@ TEST_CASE("gzip compression and decompression", "[basic]") {
io::BufferStream decompressBuffer;
io::ZlibDecompressStream
decompressStream(gsl::make_not_null(&decompressBuffer));
- decompressStream.write(const_cast<uint8_t*>(compressBuffer.getBuffer()),
compressBuffer.size());
+ decompressStream.write(const_cast<uint8_t*>(compressBuffer.getBuffer()),
gsl::narrow<int>(compressBuffer.size()));
REQUIRE(decompressStream.isFinished());
REQUIRE(original == std::string(reinterpret_cast<const
char*>(decompressBuffer.getBuffer()), decompressBuffer.size()));
@@ -81,13 +86,17 @@ TEST_CASE("gzip compression and decompression pipeline",
"[basic]") {
SECTION("Empty") {
}
SECTION("Simple content in one write") {
- REQUIRE(strlen("foobar") ==
compressStream.write(reinterpret_cast<uint8_t*>(const_cast<char*>("foobar")),
strlen("foobar")));
+ int foobar_length = gsl::narrow<int>(strlen("foobar"));
+ REQUIRE(foobar_length ==
compressStream.write(reinterpret_cast<uint8_t*>(const_cast<char*>("foobar")),
foobar_length));
original += "foobar";
}
SECTION("Simple content in two writes") {
- REQUIRE(strlen("foo") ==
compressStream.write(reinterpret_cast<uint8_t*>(const_cast<char*>("foo")),
strlen("foo")));
+ int foo_length = gsl::narrow<int>(strlen("foo"));
+ REQUIRE(foo_length ==
compressStream.write(reinterpret_cast<uint8_t*>(const_cast<char*>("foo")),
foo_length));
original += "foo";
- REQUIRE(strlen("bar") ==
compressStream.write(reinterpret_cast<uint8_t*>(const_cast<char*>("bar")),
strlen("bar")));
+
+ int bar_length = gsl::narrow<int>(strlen("bar"));
+ REQUIRE(bar_length ==
compressStream.write(reinterpret_cast<uint8_t*>(const_cast<char*>("bar")),
bar_length));
original += "bar";
}
SECTION("Large data") {
@@ -97,7 +106,8 @@ TEST_CASE("gzip compression and decompression pipeline",
"[basic]") {
for (size_t i = 0U; i < 1024U; i++) {
std::generate(buf.begin(), buf.end(), [&](){return dist(gen);});
original += std::string(reinterpret_cast<const char*>(buf.data()),
buf.size());
- REQUIRE(buf.size() == compressStream.write(buf.data(), buf.size()));
+ int buffer_size = gsl::narrow<int>(buf.size());
+ REQUIRE(buffer_size == compressStream.write(buf.data(), buffer_size));
}
}
diff --git a/main/AgentDocs.cpp b/main/AgentDocs.cpp
index 92c3e78..7307828 100644
--- a/main/AgentDocs.cpp
+++ b/main/AgentDocs.cpp
@@ -44,15 +44,11 @@ namespace minifi {
namespace docs {
std::string AgentDocs::extractClassName(const std::string &processor) const {
- auto lastOfIdx = processor.find_last_of(".");
- if (lastOfIdx != std::string::npos) {
- lastOfIdx++; // if a value is found, increment to move beyond the .
- int nameLength = processor.length() - lastOfIdx;
- std::string processorName = processor.substr(lastOfIdx, nameLength);
- return processorName;
+ auto positionOfLastDot = processor.find_last_of(".");
+ if (positionOfLastDot != std::string::npos) {
+ return processor.substr(positionOfLastDot + 1);
}
return processor;
-
}
void AgentDocs::generate(const std::string &docsdir, std::ostream &genStream) {
diff --git a/nanofi/include/sitetosite/CPeer.h
b/nanofi/include/sitetosite/CPeer.h
index d145e0b..12af30e 100644
--- a/nanofi/include/sitetosite/CPeer.h
+++ b/nanofi/include/sitetosite/CPeer.h
@@ -79,7 +79,7 @@ static void setHostName(struct SiteToSiteCPeer * peer, const
char * hostname) {
peer->_host[host_len] = '\0';
peer->_url[host_len + 7] = ':';
if(peer->_port != 0) {
- snprintf(peer->_url + host_len + 8, 5, "%d", peer->_port);
+ snprintf(peer->_url + host_len + 8, 6, "%d", peer->_port);
}
return;
}
@@ -88,7 +88,7 @@ static void setPort(struct SiteToSiteCPeer * peer, uint16_t
port) {
peer->_port = port;
if(peer->_url != NULL) {
int i;
- for(i = strlen(peer->_url) -1; i >= 0; --i) { // look for the last ':' in
the string
+ for(i = (int)(strlen(peer->_url)) - 1; i >= 0; --i) { // look for the
last ':' in the string
if(peer->_url[i] == ':'){
memset(peer->_url + i + 1, 0, 6); // zero the port area - the new
port can be shorter
snprintf(peer->_url + i + 1, 6, "%d", peer->_port);
diff --git a/nanofi/tests/CTestsBase.h b/nanofi/tests/CTestsBase.h
index b3c0767..8c37e3a 100644
--- a/nanofi/tests/CTestsBase.h
+++ b/nanofi/tests/CTestsBase.h
@@ -138,7 +138,8 @@ public:
}
~TestControllerWithTemporaryWorkingDirectory() {
- chdir(old_cwd_);
+ int success = chdir(old_cwd_);
+ (void) success;
free(old_cwd_);
}