diff options
author | Antoine Gourlay <antoine@gourlay.fr> | 2014-04-29 00:02:02 +0200 |
---|---|---|
committer | Antoine Gourlay <antoine@gourlay.fr> | 2014-04-29 00:02:02 +0200 |
commit | c6b50282ab25c092af21b81080f863f8b44d08dc (patch) | |
tree | 7e3f0bd602f5e2abe3a8170ea6d55fea6214c078 | |
parent | ca9003e453873c496c72c431f0e5f9f3eaf31511 (diff) | |
download | scala-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.scala | 2 | ||||
-rw-r--r-- | test/junit/scala/collection/convert/MapWrapperTest.scala | 10 |
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 + } } |