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(

Reply via email to