From 951610d9caeb444b3c4f944cda69bf95ef90a75f Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 23 Mar 2026 17:10:56 +0000 Subject: [PATCH] fix: prevent StringIndexOutOfBoundsException in Url.getPart() When UrlDetector.readEnd() trims the last character from URLs ending with characters like '.', ',', etc., the urlMarker indices remain based on the original buffer length. This caused getPart() to call substring() with an end index beyond the trimmed URL's length. Fix by clamping the end index to originalUrl.length and guarding against an out-of-bounds start index. https://claude.ai/code/session_014Q2SvTE5vKgUm1w8dPVjYo --- .../com/vitorpamplona/quartz/utils/urldetector/Url.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/utils/urldetector/Url.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/utils/urldetector/Url.kt index 538d9ea32..46927f771 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/utils/urldetector/Url.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/utils/urldetector/Url.kt @@ -228,11 +228,17 @@ class Url( return null } + val startIndex = urlMarker.indexOf(part) + if (startIndex < 0 || startIndex >= originalUrl.length) { + return null + } + val nextPart = nextExistingPart(part) return if (nextPart == null) { - originalUrl.substring(urlMarker.indexOf(part)) + originalUrl.substring(startIndex) } else { - originalUrl.substring(urlMarker.indexOf(part), urlMarker.indexOf(nextPart)) + val endIndex = urlMarker.indexOf(nextPart) + originalUrl.substring(startIndex, minOf(endIndex, originalUrl.length)) } }