Don't crash while parsing ignore patterns

Catch unexpected PatternSyntaxException and convert it to
InvalidPatternException. Log such errors, do not silently ignore them.

Bug: 463581
Change-Id: Id0936d9816769ec0cfae1898beda0f7a3c146e67
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
This commit is contained in:
Andrey Loskutov 2015-07-15 00:01:14 +02:00 committed by Matthias Sohn
parent 08641ea413
commit b98c84eb88
4 changed files with 20 additions and 1 deletions

View File

@ -328,6 +328,7 @@ invalidId=Invalid id: {0}
invalidId0=Invalid id invalidId0=Invalid id
invalidIdLength=Invalid id length {0}; should be {1} invalidIdLength=Invalid id length {0}; should be {1}
invalidIgnoreParamSubmodule=Found invalid ignore param for submodule {0}. invalidIgnoreParamSubmodule=Found invalid ignore param for submodule {0}.
invalidIgnoreRule=Exception caught while parsing ignore rule ''{0}''.
invalidIntegerValue=Invalid integer value: {0}.{1}={2} invalidIntegerValue=Invalid integer value: {0}.{1}={2}
invalidKey=Invalid key: {0} invalidKey=Invalid key: {0}
invalidLineInConfigFile=Invalid line in config file invalidLineInConfigFile=Invalid line in config file

View File

@ -47,6 +47,8 @@
import org.eclipse.jgit.errors.InvalidPatternException; import org.eclipse.jgit.errors.InvalidPatternException;
import org.eclipse.jgit.ignore.internal.IMatcher; import org.eclipse.jgit.ignore.internal.IMatcher;
import org.eclipse.jgit.ignore.internal.PathMatcher; import org.eclipse.jgit.ignore.internal.PathMatcher;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** /**
* "Fast" (compared with IgnoreRule) git ignore rule implementation supporting * "Fast" (compared with IgnoreRule) git ignore rule implementation supporting
@ -57,6 +59,8 @@
* @since 3.6 * @since 3.6
*/ */
public class FastIgnoreRule { public class FastIgnoreRule {
private final static Logger LOG = LoggerFactory
.getLogger(FastIgnoreRule.class);
/** /**
* Character used as default path separator for ignore entries * Character used as default path separator for ignore entries
@ -121,6 +125,7 @@ public FastIgnoreRule(String pattern) {
Character.valueOf(PATH_SEPARATOR), dirOnly); Character.valueOf(PATH_SEPARATOR), dirOnly);
} catch (InvalidPatternException e) { } catch (InvalidPatternException e) {
m = NO_MATCH; m = NO_MATCH;
LOG.error(e.getMessage(), e);
} }
this.matcher = m; this.matcher = m;
} }

View File

@ -44,13 +44,16 @@
import static java.lang.Character.isLetter; import static java.lang.Character.isLetter;
import java.text.MessageFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import org.eclipse.jgit.errors.InvalidPatternException; import org.eclipse.jgit.errors.InvalidPatternException;
import org.eclipse.jgit.ignore.FastIgnoreRule; import org.eclipse.jgit.ignore.FastIgnoreRule;
import org.eclipse.jgit.internal.JGitText;
/** /**
* Various {@link String} related utility methods, written mostly to avoid * Various {@link String} related utility methods, written mostly to avoid
@ -367,7 +370,16 @@ && isLetter(lookAhead(pattern, i)))
if (in_brackets > 0) if (in_brackets > 0)
throw new InvalidPatternException("Not closed bracket?", pattern); //$NON-NLS-1$ throw new InvalidPatternException("Not closed bracket?", pattern); //$NON-NLS-1$
return Pattern.compile(sb.toString()); try {
return Pattern.compile(sb.toString());
} catch (PatternSyntaxException e) {
InvalidPatternException patternException = new InvalidPatternException(
MessageFormat.format(JGitText.get().invalidIgnoreRule,
pattern),
pattern);
patternException.initCause(e);
throw patternException;
}
} }
/** /**

View File

@ -387,6 +387,7 @@ public static JGitText get() {
/***/ public String invalidId0; /***/ public String invalidId0;
/***/ public String invalidIdLength; /***/ public String invalidIdLength;
/***/ public String invalidIgnoreParamSubmodule; /***/ public String invalidIgnoreParamSubmodule;
/***/ public String invalidIgnoreRule;
/***/ public String invalidIntegerValue; /***/ public String invalidIntegerValue;
/***/ public String invalidKey; /***/ public String invalidKey;
/***/ public String invalidLineInConfigFile; /***/ public String invalidLineInConfigFile;