From 418bf829e188a312d5d9bd2a01a047a89367fa47 Mon Sep 17 00:00:00 2001 From: James Crosswell Date: Thu, 21 May 2026 10:15:22 +1200 Subject: [PATCH] fix: return early from AddSentryOtlpExporter when DSN is the disable-SDK sentinel When the caller passes `SentryConstants.DisableSdkDsnValue` (empty string) to `AddSentryOtlpExporter`, we now short-circuit before attempting to parse it as a real DSN. This prevents a spurious `ArgumentException` when the SDK is intentionally disabled. Fixes #5246 Co-Authored-By: Claude Sonnet 4.6 Signed-off-by: James Crosswell --- .../SentryTracerProviderBuilderExtensions.cs | 5 +++++ .../SentryTracerProviderBuilderExtensionsTests.cs | 15 ++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Sentry.OpenTelemetry.Exporter/SentryTracerProviderBuilderExtensions.cs b/src/Sentry.OpenTelemetry.Exporter/SentryTracerProviderBuilderExtensions.cs index 0bd9e03130..7dcf8e07fc 100644 --- a/src/Sentry.OpenTelemetry.Exporter/SentryTracerProviderBuilderExtensions.cs +++ b/src/Sentry.OpenTelemetry.Exporter/SentryTracerProviderBuilderExtensions.cs @@ -42,6 +42,11 @@ public static class SentryTracerProviderBuilderExtensions public static TracerProviderBuilder AddSentryOtlpExporter(this TracerProviderBuilder tracerProviderBuilder, string dsnString, Uri? collectorUrl = null, TextMapPropagator? defaultTextMapPropagator = null) { + if (Dsn.IsDisabled(dsnString)) + { + return tracerProviderBuilder; + } + if (Dsn.TryParse(dsnString) is not { } dsn) { throw new ArgumentException(MissingDsnWarning, nameof(dsnString)); diff --git a/test/Sentry.OpenTelemetry.Exporter.Tests/SentryTracerProviderBuilderExtensionsTests.cs b/test/Sentry.OpenTelemetry.Exporter.Tests/SentryTracerProviderBuilderExtensionsTests.cs index dc9ad16be0..d061cbac7c 100644 --- a/test/Sentry.OpenTelemetry.Exporter.Tests/SentryTracerProviderBuilderExtensionsTests.cs +++ b/test/Sentry.OpenTelemetry.Exporter.Tests/SentryTracerProviderBuilderExtensionsTests.cs @@ -7,7 +7,6 @@ public class SentryTracerProviderBuilderExtensionsTests { [Theory] [InlineData(null)] - [InlineData("")] [InlineData("foo")] public void AddSentryOtlpExporter_InvalidDsn_ThrowsArgumentException(string dsn) { @@ -22,6 +21,20 @@ public void AddSentryOtlpExporter_InvalidDsn_ThrowsArgumentException(string dsn) .WithMessage($"{SentryTracerProviderBuilderExtensions.MissingDsnWarning}*"); } + [Fact] + public void AddSentryOtlpExporter_DisabledSdkDsn_ReturnsWithoutConfiguringExporter() + { + // Arrange + var tracerProviderBuilder = Substitute.For(); + + // Act + var result = tracerProviderBuilder.AddSentryOtlpExporter(SentryConstants.DisableSdkDsnValue); + + // Assert + result.Should().BeSameAs(tracerProviderBuilder); + tracerProviderBuilder.DidNotReceive().AddInstrumentation(Arg.Any>()); + } + [Fact] public void OtlpConfigurationCallback_WithCustomCollectorUrl_SetsEndpointToCustomUrl() {