You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by he...@apache.org on 2020/04/09 14:46:02 UTC
[commons-jexl] branch master updated: JEXL-330: different solution
due, some regressions in real world tests Task #JEXL-330 -
JexlException.Parsing.getMessage() throws StringIndexOutOfBoundsException
when parse error is in long expression
This is an automated email from the ASF dual-hosted git repository.
henrib pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-jexl.git
The following commit(s) were added to refs/heads/master by this push:
new 46c3172 JEXL-330: different solution due, some regressions in real world tests Task #JEXL-330 - JexlException.Parsing.getMessage() throws StringIndexOutOfBoundsException when parse error is in long expression
46c3172 is described below
commit 46c31721002fad0fd7f5b1115bf0016b292a0a35
Author: henrib <he...@apache.org>
AuthorDate: Thu Apr 9 16:44:33 2020 +0200
JEXL-330: different solution due, some regressions in real world tests
Task #JEXL-330 - JexlException.Parsing.getMessage() throws StringIndexOutOfBoundsException when parse error is in long expression
---
.../java/org/apache/commons/jexl3/JexlException.java | 16 ++++++++++------
.../java/org/apache/commons/jexl3/parser/JexlParser.java | 2 +-
src/main/java/org/apache/commons/jexl3/parser/Parser.jjt | 4 ++--
3 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/src/main/java/org/apache/commons/jexl3/JexlException.java b/src/main/java/org/apache/commons/jexl3/JexlException.java
index 7c0e334..34231a8 100644
--- a/src/main/java/org/apache/commons/jexl3/JexlException.java
+++ b/src/main/java/org/apache/commons/jexl3/JexlException.java
@@ -236,15 +236,19 @@ public class JexlException extends RuntimeException {
if (length < MAX_EXCHARLOC) {
return prefix + " error in '" + expr + "'";
} else {
- int begin = info.getColumn();
- int end = begin + (MAX_EXCHARLOC / 2);
- begin -= (MAX_EXCHARLOC / 2);
- if (begin < 0) {
- end -= begin;
+ int me = MAX_EXCHARLOC / 2;
+ int begin = info.getColumn() - me;
+ if (begin < 0 || length < me) {
begin = 0;
+ } else if (begin > length) {
+ begin = me;
+ }
+ int end = begin + MAX_EXCHARLOC;
+ if (end > length) {
+ end = length;
}
return prefix + " error near '... "
- + expr.substring(begin, end > length ? length : end) + " ...'";
+ + expr.substring(begin, end) + " ...'";
}
}
diff --git a/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java b/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java
index bab6c63..85b21d1 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java
+++ b/src/main/java/org/apache/commons/jexl3/parser/JexlParser.java
@@ -572,7 +572,7 @@ public abstract class JexlParser extends StringParser {
}
if (tok != null) {
xinfo = info.at(tok.beginLine, tok.beginColumn);
- msg = readSourceLine(source, tok.beginLine);
+ msg = tok.image;
if (xclazz != null) {
try {
Constructor<T> ctor = xclazz.getConstructor(JexlInfo.class, String.class);
diff --git a/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt b/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt
index e637d59..fb5ae37 100644
--- a/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt
+++ b/src/main/java/org/apache/commons/jexl3/parser/Parser.jjt
@@ -70,8 +70,8 @@ public final class Parser extends JexlParser
} catch (TokenMgrError xtme) {
throw new JexlException.Tokenization(info, xtme).clean();
} catch (ParseException xparse) {
- Token errortok = errorToken(token, jj_lastpos, jj_scanpos, token.next);
- throw new JexlException.Parsing(info.at(errortok.beginLine, errortok.beginColumn), jexlSrc).clean();
+ Token errortok = errorToken(jj_lastpos, jj_scanpos, token.next, token);
+ throw new JexlException.Parsing(info.at(errortok.beginLine, errortok.beginColumn), errortok.image).clean();
} finally {
token_source.defaultLexState = DEFAULT;
cleanup(previous);