From 81cdd6e0d8fe01616e5c3055e5536ee63199b6e6 Mon Sep 17 00:00:00 2001 From: Joseph Walton Date: Tue, 10 Jun 2014 22:21:39 +1000 Subject: [PATCH 1/2] Clean up potential NullPointerExceptions. - Construct BufferedReaders ahead of try blocks - Don't catch exceptions in tests - Specifically check for mismatched braces in patterns - Fail on an unknown numeric type --- .../conversion/impl/NumberConverter.java | 2 ++ .../util/NamedVariablePatternMatcher.java | 5 ++++- .../xwork2/util/finder/ResourceFinder.java | 7 ++---- .../xwork2/config/ConfigurationTest.java | 10 ++------- .../util/NamedVariablePatternMatcherTest.java | 22 ++++++++++++++++--- 5 files changed, 29 insertions(+), 17 deletions(-) diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/NumberConverter.java b/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/NumberConverter.java index dfa1e0e07d..ab6efc0c35 100644 --- a/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/NumberConverter.java +++ b/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/NumberConverter.java @@ -95,6 +95,8 @@ protected boolean isInRange(Number value, String stringValue, Class toType) { bigValue = new BigInteger(stringValue); lowerBound = BigInteger.valueOf(Long.MIN_VALUE); upperBound = BigInteger.valueOf(Long.MAX_VALUE); + } else { + throw new IllegalArgumentException("Unexpected numeric type: " + toType.getName()); } } catch (NumberFormatException e) { //shoult it fail here? BigInteger doesnt seem to be so nice parsing numbers as NumberFormat diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcher.java b/xwork-core/src/main/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcher.java index a0bc6521b3..1203a49d81 100644 --- a/xwork-core/src/main/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcher.java +++ b/xwork-core/src/main/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcher.java @@ -80,7 +80,10 @@ public CompiledPattern compilePattern(String data) { char c = data.charAt(x); switch (c) { case '{' : varName = new StringBuilder(); break; - case '}' : varNames.add(varName.toString()); + case '}' : if (varName == null) { + throw new IllegalArgumentException("Mismatched braces in pattern"); + } + varNames.add(varName.toString()); regex.append("([^/]+)"); varName = null; break; diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/ResourceFinder.java b/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/ResourceFinder.java index c07bb718a8..47e7642533 100644 --- a/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/ResourceFinder.java +++ b/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/ResourceFinder.java @@ -1000,9 +1000,8 @@ private static void readJarDirectoryEntries(URL location, String basePath, Set Date: Tue, 10 Jun 2014 22:21:55 +1000 Subject: [PATCH 2/2] Fix potential NullPointerExceptions. - Allow for a null location when logging - Don't try to use a null LocationFinder --- .../config/providers/XmlConfigurationProvider.java | 4 +++- .../xwork2/util/location/LocationUtils.java | 12 ++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java b/xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java index 7a0a4e32e4..507dffc1ee 100644 --- a/xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java +++ b/xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java @@ -37,11 +37,13 @@ import com.opensymphony.xwork2.util.location.LocationUtils; import com.opensymphony.xwork2.util.logging.Logger; import com.opensymphony.xwork2.util.logging.LoggerFactory; + import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import java.io.IOException; @@ -425,7 +427,7 @@ protected void addAction(Element actionElement, PackageConfig.Builder packageCon } else { if (!verifyAction(className, name, location)) { if (LOG.isErrorEnabled()) - LOG.error("Unable to verify action [#0] with class [#1], from [#2]", name, className, location.toString()); + LOG.error("Unable to verify action [#0] with class [#1], from [#2]", name, className, ObjectUtils.toString(location)); return; } } diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/util/location/LocationUtils.java b/xwork-core/src/main/java/com/opensymphony/xwork2/util/location/LocationUtils.java index 0cbd53cb7f..fd2c55d4b6 100644 --- a/xwork-core/src/main/java/com/opensymphony/xwork2/util/location/LocationUtils.java +++ b/xwork-core/src/main/java/com/opensymphony/xwork2/util/location/LocationUtils.java @@ -263,14 +263,14 @@ public static Location getLocation(Object obj, String description) { newFinders.remove(ref); finders = newFinders; } - } - - Location result = finder.getLocation(obj, description); - if (result != null) { - return result; + } else { + Location result = finder.getLocation(obj, description); + if (result != null) { + return result; + } } } - + if (obj instanceof Throwable) { Throwable t = (Throwable) obj; StackTraceElement[] stack = t.getStackTrace();