From dd7ee7430ba99bdd6e415937eda7eec0e0430b79 Mon Sep 17 00:00:00 2001 From: taeri Date: Tue, 30 Sep 2025 14:50:13 +0300 Subject: [PATCH 1/3] Fix StringIndexOutOfBoundsException in retrofit logger request body truncation --- .../retrofit/logging/mappers/RetrofitRequestBodyMapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ee/bitweb/core/retrofit/logging/mappers/RetrofitRequestBodyMapper.java b/src/main/java/ee/bitweb/core/retrofit/logging/mappers/RetrofitRequestBodyMapper.java index c89a5c7..44ac075 100644 --- a/src/main/java/ee/bitweb/core/retrofit/logging/mappers/RetrofitRequestBodyMapper.java +++ b/src/main/java/ee/bitweb/core/retrofit/logging/mappers/RetrofitRequestBodyMapper.java @@ -76,7 +76,7 @@ String getBodyString(RequestBody body) throws IOException { assert charSet != null; var bodyString = buffer.readString(charSet); - if (body.contentLength() == -1 || body.contentLength() > maxLoggableRequestSize) { + if (body.contentLength() == -1 || bodyString.length() > maxLoggableRequestSize) { return "%s ... Content size: %s characters".formatted( bodyString.substring(0, maxLoggableRequestSize), body.contentLength() From 053e5d6350f08e6cc94e8903936ad240e8dcd98d Mon Sep 17 00:00:00 2001 From: taeri Date: Tue, 30 Sep 2025 14:54:16 +0300 Subject: [PATCH 2/3] Fix StringIndexOutOfBoundsException in retrofit logger request body truncation --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 9c35493..33fc58c 100644 --- a/build.gradle +++ b/build.gradle @@ -19,7 +19,7 @@ plugins { } group 'ee.bitweb' -version '4.0.3' +version '4.0.4' java { sourceCompatibility = '17' } From 9884c4214f5332dd5f5f264a10426397951e034a Mon Sep 17 00:00:00 2001 From: taeri Date: Tue, 30 Sep 2025 16:26:41 +0300 Subject: [PATCH 3/3] Fix StringIndexOutOfBoundsException in retrofit logger request body truncation --- .../logging/mappers/RetrofitRequestBodyMapperTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/test/java/ee/bitweb/core/retrofit/logging/mappers/RetrofitRequestBodyMapperTest.java b/src/test/java/ee/bitweb/core/retrofit/logging/mappers/RetrofitRequestBodyMapperTest.java index f92cda8..5fa2ca3 100644 --- a/src/test/java/ee/bitweb/core/retrofit/logging/mappers/RetrofitRequestBodyMapperTest.java +++ b/src/test/java/ee/bitweb/core/retrofit/logging/mappers/RetrofitRequestBodyMapperTest.java @@ -270,4 +270,14 @@ void requestContentIsReturnedInFull() throws MalformedURLException { Mockito.verify(request, Mockito.times(1)).headers(); Mockito.verifyNoInteractions(requestBody); } + + @Test + @DisplayName("Request content bytes count differs from character count") + void requestContentBytesCountDiffersFromCharacterCount() throws IOException { + // "õäöü" is 4 characters, but 8 bytes + var customBody = RequestBody.create("õäöü", MediaType.parse("text/plain")); + var mapper = new RetrofitRequestBodyMapper(5, Set.of()); + + assertEquals("õäöü", mapper.getBodyString(customBody)); + } }