From 232bf9c9ffd8323fa24584657af4fc6077e6d8b5 Mon Sep 17 00:00:00 2001 From: gmantele <gmantele@ari.uni-heidelberg.de> Date: Wed, 10 May 2017 13:08:06 +0200 Subject: [PATCH] [ADQL] Fix a NullPointerException in SearchColumnOutsiteGroupByHandler.gotInto. See the test case TestDBChecker.testClauseADQLWithNameNull() for more details. --- src/adql/db/DBChecker.java | 4 ++-- test/adql/db/TestDBChecker.java | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/adql/db/DBChecker.java b/src/adql/db/DBChecker.java index 2f476e5..876cf2a 100644 --- a/src/adql/db/DBChecker.java +++ b/src/adql/db/DBChecker.java @@ -1306,13 +1306,13 @@ public class DBChecker implements QueryChecker { * </p> * * @author Grégory Mantelet (ARI) - * @version 1.4 (04/2017) + * @version 1.4 (05/2017) * @since 1.4 */ private static class SearchColumnOutsideGroupByHandler extends SearchColumnHandler { @Override protected boolean goInto(final ADQLObject obj){ - return !(obj instanceof ClauseADQL<?> && ((ClauseADQL<?>)obj).getName().equalsIgnoreCase("GROUP BY")) && super.goInto(obj); + return !(obj instanceof ClauseADQL<?> && ((ClauseADQL<?>)obj).getName() != null && ((ClauseADQL<?>)obj).getName().equalsIgnoreCase("GROUP BY")) && super.goInto(obj); } } diff --git a/test/adql/db/TestDBChecker.java b/test/adql/db/TestDBChecker.java index c2b978a..685eaaf 100644 --- a/test/adql/db/TestDBChecker.java +++ b/test/adql/db/TestDBChecker.java @@ -96,6 +96,23 @@ public class TestDBChecker { assertEquals(expected[i], names[i]); } + @Test + public void testClauseADQLWithNameNull(){ + /* The name of an ADQLClause is got in DBChecker by SearchColumnOutsideGroupByHandler.goInto(...) + * and possibly in other locations in the future. If this name is NULL, no NullPointerException + * should be thrown. + * + * This issue can be tested by creating a ConstraintsGroup (i.e. in a constraints location like WHERE or JOIN...ON, + * a constraint (or more) between parenthesis). */ + ADQLParser parser = new ADQLParser(new DBChecker(tables, new ArrayList<FunctionDef>(0))); + try{ + parser.parseQuery("SELECT * FROM foo WHERE (colI BETWEEN 1 AND 10)"); + }catch(ParseException pe){ + pe.printStackTrace(); + fail(); + } + } + @Test public void testGroupByWithQualifiedColName(){ ADQLParser parser = new ADQLParser(new DBChecker(tables, new ArrayList<FunctionDef>(0))); -- GitLab