Repository: cassandra Updated Branches: refs/heads/trunk 50191828f -> 4a69811ee
Avoid IOOBE when building SyntaxError message snippet Patch by Benjamin Lerer; review by Tyler Hobbs for CASSANDRA-7569 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/72241f6d Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/72241f6d Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/72241f6d Branch: refs/heads/trunk Commit: 72241f6d725f9c69f1bd5239c798f1676d00ec16 Parents: 91d61b3 Author: blerer <b_le...@hotmail.com> Authored: Tue Aug 5 17:20:20 2014 -0500 Committer: Tyler Hobbs <ty...@datastax.com> Committed: Tue Aug 5 17:20:20 2014 -0500 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../org/apache/cassandra/cql3/ErrorCollector.java | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/72241f6d/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 79c84b2..9ef6cc3 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.1.1 + * Avoid IOOBE when building SyntaxError message snippet (CASSANDRA-7569) * SSTableExport uses correct validator to create string representation of partition keys (CASSANDRA-7498) * Avoid NPEs when receiving type changes for an unknown keyspace (CASSANDRA-7689) http://git-wip-us.apache.org/repos/asf/cassandra/blob/72241f6d/src/java/org/apache/cassandra/cql3/ErrorCollector.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/ErrorCollector.java b/src/java/org/apache/cassandra/cql3/ErrorCollector.java index 41536f5..cd628b8 100644 --- a/src/java/org/apache/cassandra/cql3/ErrorCollector.java +++ b/src/java/org/apache/cassandra/cql3/ErrorCollector.java @@ -115,7 +115,7 @@ public final class ErrorCollector implements ErrorListener Token from = tokenStream.get(getSnippetFirstTokenIndex(index)); Token to = tokenStream.get(getSnippetLastTokenIndex(index, size)); - Token offending = tokenStream.get(index); + Token offending = tokenStream.get(getOffendingTokenIndex(index, size)); appendSnippet(builder, from, to, offending); } @@ -157,6 +157,21 @@ public final class ErrorCollector implements ErrorListener } /** + * Returns the index of the offending token. <p>In the case where the offending token is an extra + * character at the end, the index returned by the <code>TokenStream</code> might be after the last token. + * To avoid that problem we need to make sure that the index of the offending token is a valid index + * (one for which a token exist).</p> + * + * @param index the token index returned by the <code>TokenStream</code> + * @param size the <code>TokenStream</code> size + * @return the valid index of the offending token + */ + private static int getOffendingTokenIndex(int index, int size) + { + return Math.min(index, size - 1); + } + + /** * Puts the specified token within square brackets. * * @param line the line containing the token