lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Steven A Rowe <sar...@syr.edu>
Subject RE: Regex causes stack overflow!
Date Sun, 17 Jun 2012 18:36:09 GMT
On 6/17/2012 at 11:42 AM, Uwe Schindler wrote:
> We had a failed build last night, but no eMail was sent! So I looked into
> the server's log, and found the following - something in your regex seems
> to cause a stack overflow (this is not shown in the build log itself, only
> the server log). The same may happen on Apache's Jenkins, but I have no
> access to build logs there.

Hmm, it appears to be affecting Apache's Jenkins too - no email was sent for these failed
builds: <https://builds.apache.org/job/Solr-4.x/12/> and <https://builds.apache.org/job/Solr-trunk/1887/>.

> Jun 17, 2012 9:35:29 AM hudson.plugins.girls.CordellWalkerRecorder <init>
> INFO: Girls are activated
> Jun 17, 2012 9:34:29 AM hudson.model.Executor run
> SEVERE: Executor threw an exception
> java.lang.StackOverflowError
> 	at java.util.regex.Pattern$BranchConn.match(Pattern.java:4078)
> 	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3345)
> 	at java.util.regex.Pattern$Branch.match(Pattern.java:4114)
> 	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4168)
> 	at java.util.regex.Pattern$Loop.match(Pattern.java:4295)
> 	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4227)
> 	at java.util.regex.Pattern$BranchConn.match(Pattern.java:4078)
> 	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3345)
> 	at java.util.regex.Pattern$Branch.match(Pattern.java:4114)
> 	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4168)
> 	at java.util.regex.Pattern$Loop.match(Pattern.java:4295)
[...]

I downloaded the logs for the two failed jobs (Lucene-Solr-trunk-Linux-Java7-64/307 &
.../309), and ran the below-listed program against them on Win7 using both Oracle JDK 1.6.0_21
and 1.7.0_01 with default settings.  No stack overflow, and it finds and prints out the expected
stuff.  (I include the line-counting thing because that's also used by the Jenkins plugin,
just in case that might be the problem.)  

FYI, the source for the BUILD_LOG_MULTILINE_REGEX functionality is here: <https://github.com/jenkinsci/email-ext-plugin/blob/master/src/main/java/hudson/plugins/emailext/plugins/content/BuildLogMultilineRegexContent.java>;
test suite here: <https://github.com/jenkinsci/email-ext-plugin/blob/master/src/test/java/hudson/plugins/emailext/plugins/content/BuildLogMultilineRegexContentTest.java>.

Uwe, do you have any idea how to diagnose what's happening?

Steve

-----------------------
import java.io.File;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Test {
    static final Pattern pattern = Pattern.compile("(?x:"
      +"# Compilation failures\n"
      +"(?:.*\\[javac\\].*\\r?\\n)*.*\\[javac\\]\\s+[1-9]\\d*\\s+error.*\\r?\\n          
                                 \n"
      +"# Test failures                                                                  
                                 \n"
      +"|.*\\[junit4\\]\\s*Suite:.*[\\r\\n]+.*\\[junit4\\]\\s*(?!Completed)(?!IGNOR)\\S(?s:.*?)<<<\\s*FAILURES!
           \n"
      +"# Source file license problems                                                   
                                 \n"
      +"|.*rat-sources:.*(?:\\r?\\n.*\\[echo\\].*)*\\s+[1-9]\\d*\\s+Unknown\\s+Licenses.*\\r?\\n(?:.*\\[echo\\].*\\r?\\n)*
\n"
      +"# Third-party dependency license problems - include 2 preceding lines and 1 following
line                         \n"
      +"|(?:.*\\r?\\n){2}.*\\[licenses\\]\\s+MISSING\\s+sha1(?:.*\\r?\\n){2}             
                                 \n"
      +"# Javadoc warnings                                                               
                                 \n"
      +"|(?:.*\\[javadoc\\].*\\r?\\n)*.*\\[javadoc\\]\\s*[1-9]\\d*\\s+warnings.*\\r?\\n  
                                 \n"
      +"# Other javadocs problems: broken links and missing javadocs                     
                                 \n"
      +"|.*javadocs-lint:.*\\r?\\n(?:.*\\[echo\\].*\\r?\\n)*                             
                                 \n"
      +"# Thread dumps - include 1 preceding line and the remainder of the log           
                                 \n"
      +"|.*\\r?\\n.*Full\\s+thread\\s+dump(?s:.*)                                        
                                 \n"
      +"# Jenkins problems - include the remainder of the log                            
                                 \n"
      +"|.*(?:FATAL|ERROR):(?s:.*)                                                       
                                 \n"
      +"# Include the Ant call stack - include the remainder of the log                  
                                 \n"
      +"|.*BUILD\\s+FAILED(?s:.*)                                                        
                                 \n"
      +")");
    static final Pattern lineCountPattern = Pattern.compile("(?<=.)\r?\n");
    
    public static void main(String[] args) throws IOException {
        StringBuilder builder = new StringBuilder();
        File file = new File(args[0]);
        BufferedReader reader = new BufferedReader(new FileReader(file));
        String line;
        while (null != (line = reader.readLine())) {
            builder.append(line).append("\n");
        }
        Matcher matcher = pattern.matcher(builder);
        while (matcher.find()) {
            System.err.println("Found: '" + matcher.group() + "'");
        }
        matcher = lineCountPattern.matcher(builder);
        int lineCount = 0;
        while (matcher.find()) {
            ++lineCount;
        }
        System.err.println("# lines: " + lineCount);
    }
}


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org


Mime
View raw message