diff --git a/common/cpp/include/asapo/common/networking.h b/common/cpp/include/asapo/common/networking.h index d814a88df4db17d0f9181f46ae5cb0ec6f133da3..4e85cd93f761b3e3279840ca00dbc651c852931e 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 58e2776cb6d6d05722252e6742dfa6c4b067f7d3..eddd8579cdf551271e2cffa9d00dc3895981ed85 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 2f5ea5396e01772d61c097d869d31228659a57ef..6847f92589da26fa2123d6a3290cc24b976b8f7d 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 4408f0b8478ff8c9e36416daa0eb5d828ec9d3c6..28a824f57814e0fd8112de006547613a1cc55752 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 a0b68f07018a2281f5df907387107f5164b3e3f2..2b461a31a233dd120965b8e220ebf92b3951c459 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 e416ede4b3c670a41674f27e0eaa137a0e93395c..bd06ba328faca1a9b2a6eab7f4fa0bd0da6d3dcc 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; }