From 82f7c54280c7472a336a4cc1346f4f0daece963d Mon Sep 17 00:00:00 2001 From: Ruslan Sadikov Date: Wed, 25 Feb 2026 11:57:05 +0300 Subject: [PATCH] fix: handle null body and malformed path template edge cases --- src/main/java/ru/max/botapi/client/ClientResponse.java | 2 +- src/main/java/ru/max/botapi/queries/MaxQuery.java | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/max/botapi/client/ClientResponse.java b/src/main/java/ru/max/botapi/client/ClientResponse.java index 370b8c2..b347250 100644 --- a/src/main/java/ru/max/botapi/client/ClientResponse.java +++ b/src/main/java/ru/max/botapi/client/ClientResponse.java @@ -43,7 +43,7 @@ public byte[] getBody() { } public String getBodyAsString() { - return new String(body, StandardCharsets.UTF_8); + return body == null ? "" : new String(body, StandardCharsets.UTF_8); } public Map getHeaders() { diff --git a/src/main/java/ru/max/botapi/queries/MaxQuery.java b/src/main/java/ru/max/botapi/queries/MaxQuery.java index e9ad888..a09f716 100644 --- a/src/main/java/ru/max/botapi/queries/MaxQuery.java +++ b/src/main/java/ru/max/botapi/queries/MaxQuery.java @@ -88,7 +88,11 @@ public static String substitute(String pathTemplate, Object... substitutions) { for (int i = 0; i < chars.length; i++) { char c = chars[i]; if (c == '{') { - i = pathTemplate.indexOf('}', i); + int closing = pathTemplate.indexOf('}', i); + if (closing == -1) { + throw new IllegalArgumentException("Malformed path template: unclosed '{' at index " + i + " in \"" + pathTemplate + "\""); + } + i = closing; sb.append(substitutions[nextSubst++]); continue; }