From e4f2170ea6969ff9f062cce6bf43bac8e85e807c Mon Sep 17 00:00:00 2001
From: George Sedov <george.sedov@desy.de>
Date: Mon, 7 Feb 2022 16:54:28 +0100
Subject: [PATCH] fix cpp warnings, add doxygen to docker

---
 common/cpp/include/asapo/common/networking.h       | 14 ++++++++------
 consumer/api/cpp/src/fabric_consumer_client.cpp    |  3 ++-
 consumer/api/cpp/src/tcp_consumer_client.cpp       |  3 ++-
 deploy/build_env/services-linux/Dockerfile         |  2 ++
 producer/api/cpp/src/producer_impl.cpp             |  4 ++--
 .../src/request_handler/requests_dispatcher.cpp    |  6 ++++--
 6 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/common/cpp/include/asapo/common/networking.h b/common/cpp/include/asapo/common/networking.h
index d814a88df..4e85cd93f 100644
--- a/common/cpp/include/asapo/common/networking.h
+++ b/common/cpp/include/asapo/common/networking.h
@@ -93,18 +93,20 @@ struct GenericRequestHeader {
       op_code = header.op_code, data_id = header.data_id, data_size = header.data_size, meta_size = header.meta_size,
           memcpy(custom_data, header.custom_data, kNCustomParams * sizeof(uint64_t)),
           memcpy(message, header.message, kMaxMessageSize);
-      strncpy(stream, header.stream, kMaxMessageSize);
-      strncpy(api_version, header.api_version, kMaxVersionSize);
+      memcpy(stream, header.stream, sizeof(stream));
+      memcpy(api_version, header.api_version, sizeof(api_version));
       return *this;
   };
   /* Keep in mind that the message here is just strncpy'ed, you can change the message later */
   GenericRequestHeader(Opcode i_op_code = kOpcodeUnknownOp, uint64_t i_data_id = 0,
                        uint64_t i_data_size = 0, uint64_t i_meta_size = 0, const std::string &i_message = "",
                        const std::string &i_stream = "") :
-      op_code{i_op_code}, data_id{i_data_id}, data_size{i_data_size}, meta_size{i_meta_size} {
-      strncpy(message, i_message.c_str(), kMaxMessageSize);
-      strncpy(stream, i_stream.c_str(), kMaxMessageSize);
-      strncpy(api_version, "v0.0", kMaxVersionSize);
+      op_code{i_op_code}, data_id{i_data_id}, data_size{i_data_size}, meta_size{i_meta_size}, custom_data{kDefaultIngestMode, 0, 0} {
+      strncpy(message, i_message.c_str(), kMaxMessageSize - 1);
+      message[kMaxMessageSize - 1] = '\0';
+      strncpy(stream, i_stream.c_str(), kMaxMessageSize - 1);
+      stream[kMaxMessageSize - 1] = '\0';
+      strcpy(api_version, "v0.0");
   }
 
   Opcode op_code;
diff --git a/consumer/api/cpp/src/fabric_consumer_client.cpp b/consumer/api/cpp/src/fabric_consumer_client.cpp
index 58e2776cb..eddd8579c 100644
--- a/consumer/api/cpp/src/fabric_consumer_client.cpp
+++ b/consumer/api/cpp/src/fabric_consumer_client.cpp
@@ -34,7 +34,8 @@ Error FabricConsumerClient::GetData(const MessageMeta* info, MessageData* data)
     }
 
     GenericRequestHeader request_header{kOpcodeGetBufferData, info->buf_id, info->size};
-    strncpy(request_header.api_version, kConsumerProtocol.GetRdsVersion().c_str(), kMaxVersionSize);
+    strncpy(request_header.api_version, kConsumerProtocol.GetRdsVersion().c_str(), kMaxVersionSize - 1);
+    request_header.api_version[kMaxVersionSize - 1] = '\0';
     memcpy(request_header.message, mr->GetDetails(), sizeof(fabric::MemoryRegionDetails));
     GenericNetworkResponse response{};
 
diff --git a/consumer/api/cpp/src/tcp_consumer_client.cpp b/consumer/api/cpp/src/tcp_consumer_client.cpp
index 2f5ea5396..6847f9258 100644
--- a/consumer/api/cpp/src/tcp_consumer_client.cpp
+++ b/consumer/api/cpp/src/tcp_consumer_client.cpp
@@ -14,7 +14,8 @@ TcpConsumerClient::TcpConsumerClient() : io__{GenerateDefaultIO()}, connection_p
 Error TcpConsumerClient::SendGetDataRequest(SocketDescriptor sd, const MessageMeta* info) const noexcept {
     Error err;
     GenericRequestHeader request_header{kOpcodeGetBufferData, info->buf_id, info->size};
-    strncpy(request_header.api_version, kConsumerProtocol.GetRdsVersion().c_str(), kMaxVersionSize);
+    strncpy(request_header.api_version, kConsumerProtocol.GetRdsVersion().c_str(), kMaxVersionSize - 1);
+    request_header.api_version[kMaxVersionSize - 1] = '\0';
     io__->Send(sd, &request_header, sizeof(request_header), &err);
     if (err) {
         connection_pool__->ReleaseConnection(sd);
diff --git a/deploy/build_env/services-linux/Dockerfile b/deploy/build_env/services-linux/Dockerfile
index 4408f0b84..28a824f57 100644
--- a/deploy/build_env/services-linux/Dockerfile
+++ b/deploy/build_env/services-linux/Dockerfile
@@ -29,6 +29,8 @@ RUN set -eux; \
 		iproute2 \
 		nginx-light \
 		mongodb-org-server \
+		graphviz \
+		doxygen \
 	; \
 	apt-get install -y --no-install-recommends cmake/bullseye-backports; \
 	DEBIAN_FRONTEND=noninteractive apt-get install -y slapd; \
diff --git a/producer/api/cpp/src/producer_impl.cpp b/producer/api/cpp/src/producer_impl.cpp
index a0b68f070..2b461a31a 100644
--- a/producer/api/cpp/src/producer_impl.cpp
+++ b/producer/api/cpp/src/producer_impl.cpp
@@ -491,7 +491,7 @@ Error ProducerImpl::GetServerVersionInfo(std::string* server_info,
 }
 
 Error ProducerImpl::DeleteStream(std::string stream, uint64_t timeout_ms, DeleteStreamOptions options) const {
-    auto header = GenericRequestHeader{kOpcodeDeleteStream, 0, 0, 0, "", stream};
+    GenericRequestHeader header{kOpcodeDeleteStream, 0, 0, 0, "", stream};
     header.custom_data[0] = options.Encode();
 
     Error err;
@@ -542,7 +542,7 @@ std::string ProducerImpl::GetBeamtimeMeta(uint64_t timeout_ms, Error* err) const
 }
 
 std::string ProducerImpl::GetMeta(const std::string& stream, uint64_t timeout_ms, Error* err) const {
-    auto header =  GenericRequestHeader{kOpcodeGetMeta, 0, 0, 0, "", stream};
+    GenericRequestHeader header{kOpcodeGetMeta, 0, 0, 0, "", stream};
     auto response = BlockingRequest(std::move(header), timeout_ms, err);
     if (*err) {
         return "";
diff --git a/receiver/src/request_handler/requests_dispatcher.cpp b/receiver/src/request_handler/requests_dispatcher.cpp
index e416ede4b..bd06ba328 100644
--- a/receiver/src/request_handler/requests_dispatcher.cpp
+++ b/receiver/src/request_handler/requests_dispatcher.cpp
@@ -41,13 +41,15 @@ GenericNetworkResponse RequestsDispatcher::CreateResponseToRequest(const std::un
     generic_response.error_code = GetNetworkCodeFromError(handle_error);
     strcpy(generic_response.message, "");
     if (handle_error) {
-        strncpy(generic_response.message, handle_error->Explain().c_str(), kMaxMessageSize);
+        strncpy(generic_response.message, handle_error->Explain().c_str(), kMaxMessageSize - 1);
+        generic_response.message[kMaxMessageSize - 1] = '\0';
     }
     if (request->GetResponseMessage().size() > 0) {
         if (request->GetResponseMessageType() == ResponseMessageType::kWarning) {
             generic_response.error_code = kNetErrorWarning;
         }
-        strncpy(generic_response.message, request->GetResponseMessage().c_str(), kMaxMessageSize);
+        strncpy(generic_response.message, request->GetResponseMessage().c_str(), kMaxMessageSize - 1);
+        generic_response.message[kMaxMessageSize - 1] = '\0';
     }
     return generic_response;
 }
-- 
GitLab