diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2014-02-14 13:24:05 -0800 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2014-02-14 13:24:05 -0800 |
commit | e86675f582ed8fef880f71744241f30e0d57a51c (patch) | |
tree | ad457f11f19c6487ced06dc7dedda58d538cebe9 | |
parent | d62ceb88278bbe8317e8dcce6fb8515cae64e2b1 (diff) | |
parent | a4a13199d0811d01cb008804ae34c594abdc415e (diff) | |
download | scala-e86675f582ed8fef880f71744241f30e0d57a51c.tar.gz scala-e86675f582ed8fef880f71744241f30e0d57a51c.tar.bz2 scala-e86675f582ed8fef880f71744241f30e0d57a51c.zip |
Merge pull request #3531 from Ichoran/issue/8188
SI-8188 NPE during deserialization of TrieMap
-rw-r--r-- | src/library/scala/collection/concurrent/TrieMap.scala | 4 | ||||
-rw-r--r-- | test/files/run/t8188.scala | 25 |
2 files changed, 27 insertions, 2 deletions
diff --git a/src/library/scala/collection/concurrent/TrieMap.scala b/src/library/scala/collection/concurrent/TrieMap.scala index 6632f30e51..fccc1d81b9 100644 --- a/src/library/scala/collection/concurrent/TrieMap.scala +++ b/src/library/scala/collection/concurrent/TrieMap.scala @@ -655,8 +655,8 @@ extends scala.collection.concurrent.Map[K, V] /* internal methods */ private def writeObject(out: java.io.ObjectOutputStream) { - out.writeObject(hashf) - out.writeObject(ef) + out.writeObject(hashingobj) + out.writeObject(equalityobj) val it = iterator while (it.hasNext) { diff --git a/test/files/run/t8188.scala b/test/files/run/t8188.scala new file mode 100644 index 0000000000..ec3a968e4a --- /dev/null +++ b/test/files/run/t8188.scala @@ -0,0 +1,25 @@ +object Test { + def main(args: Array[String]) { + import java.io.ByteArrayInputStream + import java.io.ByteArrayOutputStream + import java.io.ObjectInputStream + import java.io.ObjectOutputStream + import scala.collection.concurrent.TrieMap + + def ser[T](o: T): Array[Byte] = { + val baos = new ByteArrayOutputStream() + new ObjectOutputStream(baos).writeObject(o) + baos.toByteArray() + } + + def deser[T](bs: Array[Byte]): T = + new ObjectInputStream(new ByteArrayInputStream(bs)).readObject().asInstanceOf[T] + + def cloneViaSerialization[T](t: T): T = deser(ser(t)) + + val f = cloneViaSerialization(_: TrieMap[Int, Int]) + val tm = TrieMap(1 -> 2) + assert( f(f(tm)) == tm ) + assert( ser(tm).length == ser(f(tm)).length ) + } +} |