Patch-Source: https://github.com/open-telemetry/opentelemetry-cpp/pull/4573 -- From 758e8ddfb040bee08ec3e12a039eb39fd3c38654 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Mon, 14 Sep 2026 22:06:26 -0700 Subject: [PATCH 1/4] [SDK] Fix span-limit compilation on 32-bit platforms --- CHANGELOG.md | 2 ++ sdk/src/trace/span_limits.cc | 15 +++------------ 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7782139e25..435a34cf90 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ Increment the: ## [Unreleased] +* [SDK] Fix span-limit environment variable handling compilation on 32-bit platforms. + ## [1.29.0] 2026-09-13 * [RELEASE] Bump main branch to 1.29.0-dev (#4259) diff --git a/sdk/src/trace/span_limits.cc b/sdk/src/trace/span_limits.cc index aba19b12d0..f0f711cd60 100644 --- a/sdk/src/trace/span_limits.cc +++ b/sdk/src/trace/span_limits.cc @@ -1,7 +1,6 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 -#include #include #include "opentelemetry/sdk/common/env_variables.h" @@ -31,21 +30,13 @@ static constexpr const char *kLinkAttributeCountLimitEnv = "OTEL_LINK_ATTRIBUTE namespace { -void UpdateFromEnv(const char *env_var_name, std::uint32_t &limit) +template +void UpdateFromEnv(const char *env_var_name, LimitType &limit) { std::uint32_t value{}; if (opentelemetry::sdk::common::GetUintEnvironmentVariable(env_var_name, value)) { - limit = value; - } -} - -void UpdateFromEnv(const char *env_var_name, std::size_t &limit) -{ - std::uint32_t value{}; - if (opentelemetry::sdk::common::GetUintEnvironmentVariable(env_var_name, value)) - { - limit = static_cast(value); + limit = static_cast(value); } } From 9d1b80e054cd54be585d0717776da1541fcbd886 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Mon, 14 Sep 2026 22:10:23 -0700 Subject: [PATCH 2/4] Update changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 435a34cf90..ba1b7bbbb8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,8 @@ Increment the: ## [Unreleased] -* [SDK] Fix span-limit environment variable handling compilation on 32-bit platforms. +* [SDK] Fix span-limit environment variable handling compilation on 32-bit platforms (#4573) + [#4573](https://github.com/open-telemetry/opentelemetry-cpp/pull/4573) ## [1.29.0] 2026-09-13 From 5c35419854ab47743daff4d82d40912d123d4537 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Mon, 14 Sep 2026 22:52:12 -0700 Subject: [PATCH 3/4] Fix markdown lint --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba1b7bbbb8..74baff8ea9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,8 @@ Increment the: ## [Unreleased] -* [SDK] Fix span-limit environment variable handling compilation on 32-bit platforms (#4573) +* [SDK] Fix span-limit environment variable handling compilation on 32-bit + platforms (#4573) [#4573](https://github.com/open-telemetry/opentelemetry-cpp/pull/4573) ## [1.29.0] 2026-09-13 From b0fd9a85e68dfa93d46f412d0f2170424cd07978 Mon Sep 17 00:00:00 2001 From: Tom Tan Date: Mon, 14 Sep 2026 23:26:15 -0700 Subject: [PATCH 4/4] Add unittest --- sdk/test/trace/tracer_provider_test.cc | 32 ++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/sdk/test/trace/tracer_provider_test.cc b/sdk/test/trace/tracer_provider_test.cc index d8c6822388..2ee270a95d 100644 --- a/sdk/test/trace/tracer_provider_test.cc +++ b/sdk/test/trace/tracer_provider_test.cc @@ -628,6 +628,38 @@ TEST(TracerProvider, SpanLimitsFromEnvReadsVariables) UnsetSpanLimitsEnv(); } +TEST(TracerProvider, SpanLimitsFromEnvUnsignedBoundaries) +{ + UnsetSpanLimitsEnv(); + + const struct + { + const char *value; + std::uint32_t expected; + } test_cases[] = {{"0", 0}, {"4294967295", (std::numeric_limits::max)()}}; + + for (const auto &test_case : test_cases) + { + SCOPED_TRACE(test_case.value); + setenv("OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT", test_case.value, 1); + setenv("OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT", test_case.value, 1); + + const SpanLimits limits = span_limits_env::GetSpanLimitsFromEnv(SpanLimits{}); + EXPECT_EQ(limits.attribute_value_length_limit, static_cast(test_case.expected)); + EXPECT_EQ(limits.attribute_count_limit, test_case.expected); + } + + setenv("OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT", "4294967296", 1); + setenv("OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT", "4294967296", 1); + + const SpanLimits defaults{}; + const SpanLimits limits = span_limits_env::GetSpanLimitsFromEnv(defaults); + EXPECT_EQ(limits.attribute_value_length_limit, defaults.attribute_value_length_limit); + EXPECT_EQ(limits.attribute_count_limit, defaults.attribute_count_limit); + + UnsetSpanLimitsEnv(); +} + TEST(TracerProvider, SpanLimitsFromEnvCustomFallbackDefaults) { UnsetSpanLimitsEnv();