[logback-dev] [Bug 78] New: bad index in extract CallerData
bugzilla-daemon at pixie.qos.ch
bugzilla-daemon at pixie.qos.ch
Sat Jun 2 17:18:15 CEST 2007
http://bugzilla.qos.ch/show_bug.cgi?id=78
Summary: bad index in extract CallerData
Product: logback-classic
Version: unspecified
Platform: Macintosh
OS/Version: Mac OS
Status: NEW
Severity: blocker
Priority: P1
Component: Other
AssignedTo: logback-dev at qos.ch
ReportedBy: hansm at science.uva.nl
CC: hansm at science.uva.nl
Below is code from CallerData (logback 0.9.7)
This gives an error as shown below.
java.lang.ArrayIndexOutOfBoundsException: -1
at ch.qos.logback.classic.spi.CallerData.extract(CallerData.java:101)
at
ch.qos.logback.classic.spi.LoggingEvent.getCallerData(LoggingEvent.java:246)
In my code (Eclipse RCP) LoggingEvent's are collected by an appender in a
java.util.List.
Then a Jface TableViewer is allocated and the input set to that list. The
processing of the accumulated LoggingEvents now each throw the
ArrayIndexOutOfBoundsException.
After registering the viewer containing object with the appender, new incoming
LoggingEvents are given to the viewer and are processed without problem.
It looks like the "int found" has kept its value of -1, presumably because
the equals in line 88 never becomes true.
I am inclined to consider this a bug, or at least unsafe coding, because
a bad index in certain circumstances can reach the code in line 101.
The code in lines 86-97 does not guarantee that a bad index cannot occur.
78 public static CallerData[] extract(Throwable t, String
fqnOfInvokingClass) {
79 if (t == null) {
80 return null;
81 }
82
83 StackTraceElement[] steArray = t.getStackTrace();
84 CallerData[] callerDataArray;
85
86 int found = -1;
87 for (int i = 0; i < steArray.length; i++) {
88 if(steArray[i].getClassName().equals(fqnOfInvokingClass)) {
89 // the caller is assumed to be the next stack frame, hence the +1.
90 found = i + 1;
91 } else {
92 if(found != -1) {
93 break;
94 }
95 }
96
97 }
98
99 callerDataArray = new CallerData[steArray.length - found];
100 for (int i = found; i < steArray.length; i++) {
101 callerDataArray[i-found] = new CallerData(steArray[i]);
102 }
103 return callerDataArray;
104 }
105
--
Configure bugmail: http://bugzilla.qos.ch/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
More information about the logback-dev
mailing list