summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntoine Gourlay <antoine@gourlay.fr>2014-04-29 00:02:02 +0200
committerAntoine Gourlay <antoine@gourlay.fr>2014-04-29 00:02:02 +0200
commitc6b50282ab25c092af21b81080f863f8b44d08dc (patch)
tree7e3f0bd602f5e2abe3a8170ea6d55fea6214c078
parentca9003e453873c496c72c431f0e5f9f3eaf31511 (diff)
downloadscala-c6b50282ab25c092af21b81080f863f8b44d08dc.tar.gz
scala-c6b50282ab25c092af21b81080f863f8b44d08dc.tar.bz2
scala-c6b50282ab25c092af21b81080f863f8b44d08dc.zip
SI-8504 fix NPE in the Java wrapper for a Scala Map.
MapWrapper blindly calls .hashCode on keys that can very well be null.
-rw-r--r--src/library/scala/collection/convert/Wrappers.scala2
-rw-r--r--test/junit/scala/collection/convert/MapWrapperTest.scala10
2 files changed, 11 insertions, 1 deletions
diff --git a/src/library/scala/collection/convert/Wrappers.scala b/src/library/scala/collection/convert/Wrappers.scala
index 14ae57c43a..7d1d6b3781 100644
--- a/src/library/scala/collection/convert/Wrappers.scala
+++ b/src/library/scala/collection/convert/Wrappers.scala
@@ -194,7 +194,7 @@ private[collection] trait Wrappers {
def getKey = k
def getValue = v
def setValue(v1 : B) = self.put(k, v1)
- override def hashCode = byteswap32(k.hashCode) + (byteswap32(v.hashCode) << 16)
+ override def hashCode = byteswap32(k.##) + (byteswap32(v.##) << 16)
override def equals(other: Any) = other match {
case e: ju.Map.Entry[_, _] => k == e.getKey && v == e.getValue
case _ => false
diff --git a/test/junit/scala/collection/convert/MapWrapperTest.scala b/test/junit/scala/collection/convert/MapWrapperTest.scala
index 060b6b5937..22eaf858ea 100644
--- a/test/junit/scala/collection/convert/MapWrapperTest.scala
+++ b/test/junit/scala/collection/convert/MapWrapperTest.scala
@@ -46,4 +46,14 @@ class MapWrapperTest {
assertFalse(javaMap.containsKey(null)) // negative test, null key
assertEquals(4, scalaMap.containsCounter)
}
+
+ // test for SI-8504
+ @Test
+ def testHashCode() {
+ import scala.collection.JavaConverters._
+ val javaMap = Map(1 -> null).asJava
+
+ // Before the fix for SI-8504, this throws a NPE
+ javaMap.hashCode
+ }
}