Skip to content

Commit 71eb63e

Browse files
committed
Pull in fix for scan-build memory leak
TL;DR if there were repeated keys when parsing the data in the testing code we could leak their values. This matches the latest version upstream in open-telemetry/sig-profiling#79 .
1 parent f484ff7 commit 71eb63e

1 file changed

Lines changed: 14 additions & 9 deletions

File tree

ddprof-lib/src/main/cpp/otel_process_ctx.cpp

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
#endif
3636

3737
#ifndef MFD_NOEXEC_SEAL
38-
#define MFD_NOEXEC_SEAL 0x0008U
38+
#define MFD_NOEXEC_SEAL 8U
3939
#endif
4040

4141
static const otel_process_ctx_data empty_data = {
@@ -705,14 +705,19 @@ static otel_process_ctx_result otel_process_ctx_encode_protobuf_payload(char **o
705705
if (!value) return false;
706706

707707
// Dispatch based on key
708-
if (strcmp(key_buffer, "deployment.environment.name") == 0) { data_out->deployment_environment_name = value; }
709-
else if (strcmp(key_buffer, "service.instance.id") == 0) { data_out->service_instance_id = value; }
710-
else if (strcmp(key_buffer, "service.name") == 0) { data_out->service_name = value; }
711-
else if (strcmp(key_buffer, "service.version") == 0) { data_out->service_version = value; }
712-
else if (strcmp(key_buffer, "telemetry.sdk.language") == 0) { data_out->telemetry_sdk_language = value; }
713-
else if (strcmp(key_buffer, "telemetry.sdk.version") == 0) { data_out->telemetry_sdk_version = value; }
714-
else if (strcmp(key_buffer, "telemetry.sdk.name") == 0) { data_out->telemetry_sdk_name = value; }
715-
else {
708+
const char **field = NULL;
709+
if (strcmp(key_buffer, "deployment.environment.name") == 0) { field = &data_out->deployment_environment_name; }
710+
else if (strcmp(key_buffer, "service.instance.id") == 0) { field = &data_out->service_instance_id; }
711+
else if (strcmp(key_buffer, "service.name") == 0) { field = &data_out->service_name; }
712+
else if (strcmp(key_buffer, "service.version") == 0) { field = &data_out->service_version; }
713+
else if (strcmp(key_buffer, "telemetry.sdk.language") == 0) { field = &data_out->telemetry_sdk_language; }
714+
else if (strcmp(key_buffer, "telemetry.sdk.version") == 0) { field = &data_out->telemetry_sdk_version; }
715+
else if (strcmp(key_buffer, "telemetry.sdk.name") == 0) { field = &data_out->telemetry_sdk_name; }
716+
717+
if (field != NULL) {
718+
if (*field != NULL) { free(value); return false; }
719+
*field = value;
720+
} else {
716721
char *key = strdup(key_buffer);
717722

718723
if (!key || resource_index + 2 >= resource_capacity) {

0 commit comments

Comments
 (0)