This is an automated email from the ASF dual-hosted git repository. vy pushed a commit to branch fix/2.24.x/JTL-StackTraceStringResolver in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 0061cfe2faf64a5f575302139a9221065c1faf3b Author: Volkan Yazıcı <[email protected]> AuthorDate: Mon Nov 18 11:27:04 2024 +0100 Simplify line start matching --- .../json/resolver/StackTraceStringResolver.java | 28 ++++++++++------------ 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/StackTraceStringResolver.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/StackTraceStringResolver.java index 077bf3d359..7a4634a86f 100644 --- a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/StackTraceStringResolver.java +++ b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/StackTraceStringResolver.java @@ -119,7 +119,7 @@ final class StackTraceStringResolver implements StackTraceResolver { for (; ; ) { // Find the next label start, if present. - final int labeledLineStartIndex = findLabeledLineStartIndex(srcWriter, startIndex, srcWriter.length()); + final int labeledLineStartIndex = findLabeledLineStartIndex(srcWriter, startIndex); final int endIndex = labeledLineStartIndex >= 0 ? labeledLineStartIndex : srcWriter.length(); // Copy up to the truncation point, if it matches. @@ -195,26 +195,27 @@ final class StackTraceStringResolver implements StackTraceResolver { return -1; } - private static int findLabeledLineStartIndex(final CharSequence buffer, final int startIndex, final int endIndex) { + private static int findLabeledLineStartIndex(final CharSequence buffer, final int startIndex) { // Note that the index arithmetic in this method is not guarded. // That is, there are no `Math.addExact()` or `Math.subtractExact()` usages. // Since we know a priori that we are already operating within buffer limits. - for (int bufferIndex = startIndex; bufferIndex < endIndex; ) { + final int bufferLength = buffer.length(); + for (int bufferIndex = startIndex; bufferIndex < bufferLength; ) { // Find the next line start, if exists. - final int lineStartIndex = findLineStartIndex(buffer, bufferIndex, endIndex); + final int lineStartIndex = findLineStartIndex(buffer, bufferIndex); if (lineStartIndex < 0) { break; } bufferIndex = lineStartIndex; // Skip tabs. - while (bufferIndex < endIndex && '\t' == buffer.charAt(bufferIndex)) { + while (bufferIndex < bufferLength && '\t' == buffer.charAt(bufferIndex)) { bufferIndex++; } // Search for the `Caused by: ` occurrence. - if (bufferIndex < (endIndex - 11) + if (bufferIndex < (bufferLength - 11) && buffer.charAt(bufferIndex) == 'C' && buffer.charAt(bufferIndex + 1) == 'a' && buffer.charAt(bufferIndex + 2) == 'u' @@ -230,7 +231,7 @@ final class StackTraceStringResolver implements StackTraceResolver { } // Search for the `Suppressed: ` occurrence. - else if (bufferIndex < (endIndex - 12) + else if (bufferIndex < (bufferLength - 12) && buffer.charAt(bufferIndex) == 'S' && buffer.charAt(bufferIndex + 1) == 'u' && buffer.charAt(bufferIndex + 2) == 'p' @@ -249,16 +250,13 @@ final class StackTraceStringResolver implements StackTraceResolver { return -1; } - private static int findLineStartIndex(final CharSequence buffer, final int startIndex, final int endIndex) { - char prevChar = '-'; - int i = startIndex; - for (; i < endIndex; i++) { - if (prevChar == '\n') { - return i; + private static int findLineStartIndex(final CharSequence buffer, final int startIndex) { + for (int bufferIndex = startIndex; bufferIndex < buffer.length(); bufferIndex++) { + if (buffer.charAt(bufferIndex) == '\n' && (bufferIndex + 1) < buffer.length()) { + return bufferIndex + 1; } - prevChar = buffer.charAt(i); } - return prevChar == '\n' ? i : -1; + return -1; } private static int findMatchingIndex(
