Author: fmeschbe
Date: Fri Dec 5 12:00:18 2014
New Revision: 1643248
URL: http://svn.apache.org/viewvc?rev=1643248&view=rev
Log:
SLING-4219 Prevent IllegalStateException if SlightlyParserErrorListener is
called with null RecognitionException
Note: The actual problem is the SlingException(String, Throwable) constructor
which calls initCause if the Throwable is null. This should be fixed as well.
(Applying patch by Radu Cotescu, thanks for providing the patch!)
Modified:
sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/frontend/SightlyParserErrorListener.java
sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/UnitLoader.java
Modified:
sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/frontend/SightlyParserErrorListener.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/frontend/SightlyParserErrorListener.java?rev=1643248&r1=1643247&r2=1643248&view=diff
==============================================================================
---
sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/frontend/SightlyParserErrorListener.java
(original)
+++
sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/frontend/SightlyParserErrorListener.java
Fri Dec 5 12:00:18 2014
@@ -28,25 +28,22 @@ import org.antlr.v4.runtime.Parser;
import org.antlr.v4.runtime.RecognitionException;
import org.antlr.v4.runtime.Recognizer;
import
org.apache.sling.scripting.sightly.impl.compiler.SightlyParsingException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
* The {@code SightlyParserErrorListener} handles parsing error reporting by
sending offending input to a logger.
*/
public class SightlyParserErrorListener extends BaseErrorListener {
- private static final Logger LOG =
LoggerFactory.getLogger(SightlyParserErrorListener.class);
-
@Override
- public void syntaxError(Recognizer<?, ?> recognizer, Object
offendingSymbol, int line, int charPositionInLine, String msg,
RecognitionException e) {
+ public void syntaxError(Recognizer<?, ?> recognizer, Object
offendingSymbol, int line, int charPositionInLine, String msg,
+ RecognitionException e) {
List<String> stack = ((Parser) recognizer).getRuleInvocationStack();
Collections.reverse(stack);
- StringBuilder errorMessage = new StringBuilder();
- errorMessage.append("Sightly syntax error detected.\n");
- errorMessage.append("rule stack: ").append(stack).append("\n");
- errorMessage.append("error starts at column:
").append(charPositionInLine).append("\n");
- errorMessage.append(msg);
- throw new SightlyParsingException("Sightly syntax error detected",
((CommonTokenStream)
recognizer.getInputStream()).getTokenSource().getInputStream().toString(), e);
+ if (e != null) {
+ throw new SightlyParsingException(msg,
+ ((CommonTokenStream)
recognizer.getInputStream()).getTokenSource().getInputStream().toString(), e);
+ }
+ throw new SightlyParsingException(msg,
+ ((CommonTokenStream)
recognizer.getInputStream()).getTokenSource().getInputStream().toString());
}
}
Modified:
sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/UnitLoader.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/UnitLoader.java?rev=1643248&r1=1643247&r2=1643248&view=diff
==============================================================================
---
sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/UnitLoader.java
(original)
+++
sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/UnitLoader.java
Fri Dec 5 12:00:18 2014
@@ -292,7 +292,7 @@ public class UnitLoader implements Event
if (StringUtils.isNotEmpty(offendingInput)) {
offendingInput =
StringEscapeUtils.unescapeHtml(offendingInput.trim());
int errorLine = getLineWhereErrorOccurred(scriptSource,
offendingInput);
- throw new SightlyParsingException("Parsing error in template "
+ identifier.getResource().getPath() + " at line " +
+ throw new SightlyException("Parsing error in template " +
identifier.getResource().getPath() + " at line " +
errorLine + ":\n" + offendingInput + "\n");
} else {
throw e;