diff --git a/src/libraries/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/W3CPropagator.cs b/src/libraries/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/W3CPropagator.cs index c02c575bbce010..0b074539f1cd56 100644 --- a/src/libraries/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/W3CPropagator.cs +++ b/src/libraries/System.Diagnostics.DiagnosticSource/src/System/Diagnostics/W3CPropagator.cs @@ -152,6 +152,15 @@ internal static bool TryExtractBaggage(string? baggageString, out IEnumerable MaxTraceStateEncodedLength) + { + return ValidateTraceStateCore(traceState); + } + + if (ReferenceEquals(traceState, t_lastRawTraceState)) + { + return t_lastValidatedTraceState; + } + + string? validated = ValidateTraceStateCore(traceState); + t_lastRawTraceState = traceState; + t_lastValidatedTraceState = validated; + return validated; + } + + private static string? ValidateTraceStateCore(string traceState) + { int entries = 0; using ValueStringBuilder vsb = new ValueStringBuilder(stackalloc char[Math.Min(traceState.Length, MaxTraceStateEncodedLength)]);