[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