WW-4360 Fixes potential NullPointerExceptions
Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/413d67bd Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/413d67bd Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/413d67bd Branch: refs/heads/develop Commit: 413d67bd28ea414e586e596a50d68d9d2d0312a2 Parents: 2dd9cb5 Author: Lukasz Lenart <lukaszlen...@apache.org> Authored: Mon Jul 28 21:35:17 2014 +0200 Committer: Lukasz Lenart <lukaszlen...@apache.org> Committed: Mon Jul 28 21:35:17 2014 +0200 ---------------------------------------------------------------------- .../providers/XmlConfigurationProvider.java | 4 +++- .../xwork2/conversion/impl/NumberConverter.java | 2 ++ .../util/NamedVariablePatternMatcher.java | 5 ++++- .../xwork2/util/finder/ResourceFinder.java | 7 ++----- .../xwork2/util/location/LocationUtils.java | 12 +++++------ .../util/NamedVariablePatternMatcherTest.java | 22 +++++++++++++++++--- 6 files changed, 36 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/struts/blob/413d67bd/xwork-core/src/main/java/com/opensymphony/xwork2/config/providers/XmlConfigurationProvider.java ---------------------------------------------------------------------- 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 6f9508b..253048b 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.Location; 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; @@ -426,7 +428,7 @@ public class XmlConfigurationProvider implements ConfigurationProvider { } 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, location); return; } } http://git-wip-us.apache.org/repos/asf/struts/blob/413d67bd/xwork-core/src/main/java/com/opensymphony/xwork2/conversion/impl/NumberConverter.java ---------------------------------------------------------------------- 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 dfa1e0e..ab6efc0 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 @@ public class NumberConverter extends DefaultTypeConverter { 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 http://git-wip-us.apache.org/repos/asf/struts/blob/413d67bd/xwork-core/src/main/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcher.java ---------------------------------------------------------------------- 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 a0bc652..1203a49 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 class NamedVariablePatternMatcher implements PatternMatcher<NamedVariable 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; http://git-wip-us.apache.org/repos/asf/struts/blob/413d67bd/xwork-core/src/main/java/com/opensymphony/xwork2/util/finder/ResourceFinder.java ---------------------------------------------------------------------- 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 c07bb71..47e7642 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 @@ public class ResourceFinder { private Properties loadProperties(URL resource) throws IOException { InputStream in = resource.openStream(); - BufferedInputStream reader = null; + BufferedInputStream reader = new BufferedInputStream(in); try { - reader = new BufferedInputStream(in); Properties properties = new Properties(); properties.load(reader); @@ -1018,12 +1017,10 @@ public class ResourceFinder { private String readContents(URL resource) throws IOException { InputStream in = resource.openStream(); - BufferedInputStream reader = null; StringBuilder sb = new StringBuilder(); + BufferedInputStream reader = new BufferedInputStream(in); try { - reader = new BufferedInputStream(in); - int b = reader.read(); while (b != -1) { sb.append((char) b); http://git-wip-us.apache.org/repos/asf/struts/blob/413d67bd/xwork-core/src/main/java/com/opensymphony/xwork2/util/location/LocationUtils.java ---------------------------------------------------------------------- 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 0cbd53c..fd2c55d 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 class LocationUtils { 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(); http://git-wip-us.apache.org/repos/asf/struts/blob/413d67bd/xwork-core/src/test/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcherTest.java ---------------------------------------------------------------------- diff --git a/xwork-core/src/test/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcherTest.java b/xwork-core/src/test/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcherTest.java index 6137125..3e284e5 100644 --- a/xwork-core/src/test/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcherTest.java +++ b/xwork-core/src/test/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcherTest.java @@ -15,16 +15,23 @@ */ package com.opensymphony.xwork2.util; -import com.opensymphony.xwork2.util.NamedVariablePatternMatcher.CompiledPattern; -import junit.framework.TestCase; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.regex.Pattern; -public class NamedVariablePatternMatcherTest extends TestCase { +import org.junit.Test; + +import com.opensymphony.xwork2.util.NamedVariablePatternMatcher.CompiledPattern; + +public class NamedVariablePatternMatcherTest { + @Test public void testCompile() { NamedVariablePatternMatcher matcher = new NamedVariablePatternMatcher(); @@ -46,6 +53,14 @@ public class NamedVariablePatternMatcherTest extends TestCase { assertFalse(pattern.getPattern().matcher("foo/star/jie").matches()); } + @Test(expected = IllegalArgumentException.class) + public void testCompileWithMismatchedBracketsParses() { + NamedVariablePatternMatcher matcher = new NamedVariablePatternMatcher(); + + matcher.compilePattern("}"); + } + + @Test public void testMatch() { NamedVariablePatternMatcher matcher = new NamedVariablePatternMatcher(); @@ -56,6 +71,7 @@ public class NamedVariablePatternMatcherTest extends TestCase { assertEquals("baz", vars.get("bar")); } + @Test public void testIsLiteral() { NamedVariablePatternMatcher matcher = new NamedVariablePatternMatcher();