From fd3742371fea77736bea70b5fe84213b6438e5ea Mon Sep 17 00:00:00 2001 From: "datadog-datadog-prod-us1[bot]" <88084959+datadog-datadog-prod-us1[bot]@users.noreply.github.com> Date: Wed, 26 Nov 2025 16:34:35 +0000 Subject: [PATCH 1/2] avoid span duration overflow Co-authored-by: VianneyRuhlmann <169818982+VianneyRuhlmann@users.noreply.github.com> --- libdd-trace-normalization/src/normalize_utils.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/libdd-trace-normalization/src/normalize_utils.rs b/libdd-trace-normalization/src/normalize_utils.rs index 0fbc5ca82d..d844223115 100644 --- a/libdd-trace-normalization/src/normalize_utils.rs +++ b/libdd-trace-normalization/src/normalize_utils.rs @@ -56,7 +56,7 @@ pub fn normalize_span_start_duration(start: &mut i64, duration: &mut i64) { if *duration < 0 { *duration = 0; } - if *duration > i64::MAX - *start { + if (*start).checked_add(*duration).is_none() { *duration = 0; } @@ -286,6 +286,14 @@ mod tests { use super::*; use duplicate::duplicate_item; + #[test] + fn test_normalize_span_start_duration_handles_min_start() { + let mut start = i64::MIN; + let mut duration = 1; + normalize_span_start_duration(&mut start, &mut duration); + assert_eq!(duration, 0); + } + #[duplicate_item( test_name input expected; [test_normalize_empty_string] [""] ["unnamed_operation"]; From 3fa0c53a4f07ccf727a6a34f2e2e439d5ee44026 Mon Sep 17 00:00:00 2001 From: vianney Date: Wed, 26 Nov 2025 18:25:20 +0100 Subject: [PATCH 2/2] fix expected test results --- libdd-trace-normalization/src/normalize_utils.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/libdd-trace-normalization/src/normalize_utils.rs b/libdd-trace-normalization/src/normalize_utils.rs index d844223115..b70093c817 100644 --- a/libdd-trace-normalization/src/normalize_utils.rs +++ b/libdd-trace-normalization/src/normalize_utils.rs @@ -291,6 +291,15 @@ mod tests { let mut start = i64::MIN; let mut duration = 1; normalize_span_start_duration(&mut start, &mut duration); + assert_eq!(duration, 1); + assert!(start > YEAR_2000_NANOSEC_TS); + } + + #[test] + fn test_normalize_span_start_duration_handles_max_start() { + let mut start = i64::MAX; + let mut duration = 1; + normalize_span_start_duration(&mut start, &mut duration); assert_eq!(duration, 0); }