You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by si...@apache.org on 2012/05/31 17:43:50 UTC

svn commit: r1344780 - in /commons/proper/functor/trunk/src: changes/changes.xml main/java/org/apache/commons/functor/generator/TransformedGenerator.java test/java/org/apache/commons/functor/generator/TestTransformedGenerator.java

Author: simonetripodi
Date: Thu May 31 15:43:49 2012
New Revision: 1344780

URL: http://svn.apache.org/viewvc?rev=1344780&view=rev
Log:
[FUNCTOR-8] Possible NPE in TransformedGenerator if getWrappedGenerator() is overridden to return null - patch submitted by Bruno P. Kinoshita

Modified:
    commons/proper/functor/trunk/src/changes/changes.xml
    commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/generator/TransformedGenerator.java
    commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/generator/TestTransformedGenerator.java

Modified: commons/proper/functor/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/changes/changes.xml?rev=1344780&r1=1344779&r2=1344780&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/changes/changes.xml (original)
+++ commons/proper/functor/trunk/src/changes/changes.xml Thu May 31 15:43:49 2012
@@ -23,6 +23,9 @@
   </properties>
   <body>
     <release version="1.0" date="2012-??-??" description="First release.">
+      <action dev="simonetripodi" issue="FUNCTOR-8" due-to="Bruno P. Kinoshita">
+        Possible NPE in TransformedGenerator if getWrappedGenerator() is overridden to return null
+      </action>
       <action dev="simonetripodi" issue="FUNCTOR-7" due-to="Bruno P. Kinoshita">
         Tests for generators
       </action>

Modified: commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/generator/TransformedGenerator.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/generator/TransformedGenerator.java?rev=1344780&r1=1344779&r2=1344780&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/generator/TransformedGenerator.java (original)
+++ commons/proper/functor/trunk/src/main/java/org/apache/commons/functor/generator/TransformedGenerator.java Thu May 31 15:43:49 2012
@@ -86,7 +86,8 @@ public class TransformedGenerator<I, E> 
     public int hashCode() {
         int result = "TransformedGenerator".hashCode();
         result <<= 2;
-        result ^= getWrappedGenerator().hashCode();
+        Generator<?> gen = getWrappedGenerator();
+        result ^= gen == null ? 0 : gen.hashCode();
         result <<= 2;
         result ^= func.hashCode();
         return result;

Modified: commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/generator/TestTransformedGenerator.java
URL: http://svn.apache.org/viewvc/commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/generator/TestTransformedGenerator.java?rev=1344780&r1=1344779&r2=1344780&view=diff
==============================================================================
--- commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/generator/TestTransformedGenerator.java (original)
+++ commons/proper/functor/trunk/src/test/java/org/apache/commons/functor/generator/TestTransformedGenerator.java Thu May 31 15:43:49 2012
@@ -1,10 +1,7 @@
 /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
  *
  *      http://www.apache.org/licenses/LICENSE-2.0
  *
@@ -17,6 +14,7 @@
 package org.apache.commons.functor.generator;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -33,7 +31,6 @@ import org.junit.Test;
 
 /**
  * Tests the Transformed Generator class.
- * @author Bruno P. Kinoshita (brunodepaulak@yahoo.com.br)
  */
 public class TestTransformedGenerator
 {
@@ -43,7 +40,7 @@ public class TestTransformedGenerator
         wrappedGenerator = new IntegerRange(1, 10);
         sumsTwoGenerator = new TransformedGenerator<Integer, Integer>(wrappedGenerator, sumsTwo);
     }
-    
+
     @After
     public void tearDown() {
         wrappedGenerator = null;
@@ -53,7 +50,7 @@ public class TestTransformedGenerator
 
     // Tests
     // ------------------------------------------------------------------------
-    
+
     @Test
     public void testConstructorProhibitsNull() {
         try {
@@ -75,10 +72,10 @@ public class TestTransformedGenerator
             // expected
         }
     }
-    
+
     @Test
     public void testEquals() {
-        TransformedGenerator<Integer, Integer> anotherTransformedGenerator = 
+        TransformedGenerator<Integer, Integer> anotherTransformedGenerator =
                         new TransformedGenerator<Integer, Integer>(wrappedGenerator, sumsTwo);
         assertEquals(sumsTwoGenerator, sumsTwoGenerator);
         assertEquals(sumsTwoGenerator, anotherTransformedGenerator);
@@ -91,18 +88,24 @@ public class TestTransformedGenerator
                 }
             });
         assertTrue( !sumsTwoGenerator.equals(aGenerateWithADifferentFunction));
-        
-        TransformedGenerator<Integer, Integer> aTransformedGeneratorWithADifferentWrapped = 
+
+        TransformedGenerator<Integer, Integer> aTransformedGeneratorWithADifferentWrapped =
         		new TransformedGenerator<Integer, Integer>(new IntegerRange(1,2), sumsTwo);
         assertTrue(!sumsTwoGenerator.equals(aTransformedGeneratorWithADifferentWrapped));
     }
-    
+
     @Test
     public void testHashcode() {
         assertEquals(sumsTwoGenerator.hashCode(), sumsTwoGenerator.hashCode());
         assertEquals(sumsTwoGenerator.hashCode(), new TransformedGenerator<Integer, Integer>(wrappedGenerator, sumsTwo).hashCode());
+        assertFalse(sumsTwoGenerator.hashCode() == new TransformedGenerator<Integer, Integer>(wrappedGenerator, sumsTwo) {
+            @Override
+            protected Generator<? extends Integer> getWrappedGenerator() {
+                return null;
+            }
+        }.hashCode());
     }
-    
+
     @Test
     public void testGenerate() {
         final List<Integer> doubledValues = new ArrayList<Integer>();
@@ -111,9 +114,9 @@ public class TestTransformedGenerator
                 doubledValues.add(obj);
             }
         });
-        
+
         final List<Integer> expected = Arrays.asList(3, 4, 5, 6, 7, 8, 9, 10 , 11);
-        
+
         assertEquals(9, doubledValues.size());
         assertEquals(expected, doubledValues);
     }
@@ -121,7 +124,7 @@ public class TestTransformedGenerator
     // Attributes
     // ------------------------------------------------------------------------
     private static final Integer TWO = new Integer(2);
-    
+
     private Generator<Integer> wrappedGenerator = null;
     private UnaryFunction<Integer, Integer> sumsTwo = new UnaryFunction<Integer, Integer>() {
         public Integer evaluate( Integer obj ) {
@@ -129,5 +132,5 @@ public class TestTransformedGenerator
         }
     };
     private TransformedGenerator<Integer, Integer> sumsTwoGenerator = null;
-    
+
 }