From e95d4e7cd488b1474b35d927811238b57693d73f Mon Sep 17 00:00:00 2001 From: ADITYA-CODE-SOURCE Date: Sun, 12 Jul 2026 09:36:13 +0530 Subject: [PATCH] Use NumberFormatException in baggage decoder --- .../api/baggage/propagation/BaggageCodec.java | 10 ++++++++-- .../api/baggage/propagation/BaggageCodecTest.java | 9 +++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/api/all/src/main/java/io/opentelemetry/api/baggage/propagation/BaggageCodec.java b/api/all/src/main/java/io/opentelemetry/api/baggage/propagation/BaggageCodec.java index 95c60f49817..71c8bd875fb 100644 --- a/api/all/src/main/java/io/opentelemetry/api/baggage/propagation/BaggageCodec.java +++ b/api/all/src/main/java/io/opentelemetry/api/baggage/propagation/BaggageCodec.java @@ -84,8 +84,14 @@ static String decode(String value, Charset charset) { private static int digit16(byte b) { int i = Character.digit((char) b, RADIX); if (i == -1) { - throw new IllegalArgumentException( // FIXME - "Invalid URL encoding: not a valid digit (radix " + RADIX + "): " + b); + throw new NumberFormatException( + "Invalid URL encoding: not a valid digit (radix " + + RADIX + + "): byte=" + + b + + ", char='" + + (char) (b & 0xff) + + "'"); } return i; } diff --git a/api/all/src/test/java/io/opentelemetry/api/baggage/propagation/BaggageCodecTest.java b/api/all/src/test/java/io/opentelemetry/api/baggage/propagation/BaggageCodecTest.java index f65430829cb..22b23cda0c3 100644 --- a/api/all/src/test/java/io/opentelemetry/api/baggage/propagation/BaggageCodecTest.java +++ b/api/all/src/test/java/io/opentelemetry/api/baggage/propagation/BaggageCodecTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.api.baggage.propagation; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import java.nio.charset.StandardCharsets; import org.junit.jupiter.api.Test; @@ -38,4 +39,12 @@ void shouldIgnoreIfMalformedData() { assertThat(BaggageCodec.decode("%", StandardCharsets.UTF_8)).isEqualTo(""); assertThat(BaggageCodec.decode("%1", StandardCharsets.UTF_8)).isEqualTo(""); } + + @Test + void shouldThrowNumberFormatExceptionForInvalidHexDigit() { + assertThatThrownBy(() -> BaggageCodec.decode("%G0", StandardCharsets.UTF_8)) + .isInstanceOf(NumberFormatException.class) + .hasMessageContaining("byte=71") + .hasMessageContaining("char='G'"); + } }