You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2014/07/28 21:35:29 UTC

[2/2] git commit: WW-4360 Fixes potential NullPointerExceptions

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 <lu...@apache.org>
Authored: Mon Jul 28 21:35:17 2014 +0200
Committer: Lukasz Lenart <lu...@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();