From bf0b9fcf84d346231db868e522dce17ded59888e Mon Sep 17 00:00:00 2001 From: Paul Phillips Date: Mon, 31 Oct 2011 18:26:41 +0000 Subject: Fixes NPE using iterator with an XML attribute ... Fixes NPE using iterator with an XML attribute being null or None ) (SI-5052 Also fixes incorrect size method (SI-5115 ) Contributed by Jordi Salvat i Alabart. Closes SI-5052, SI-5115, no review. --- src/library/scala/xml/Attribute.scala | 11 +++++++++++ src/library/scala/xml/MetaData.scala | 4 ---- src/library/scala/xml/Null.scala | 1 + 3 files changed, 12 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/library/scala/xml/Attribute.scala b/src/library/scala/xml/Attribute.scala index 9523891a9c..6b68e97412 100644 --- a/src/library/scala/xml/Attribute.scala +++ b/src/library/scala/xml/Attribute.scala @@ -73,6 +73,17 @@ abstract trait Attribute extends MetaData { (next(arg, scope, key) == null) && (next wellformed scope) } + /** Returns an iterator on attributes */ + override def iterator: Iterator[MetaData] = { + if (value == null) next.iterator + else Iterator.single(this) ++ next.iterator + } + + override def size: Int = { + if (value == null) next.size + else 1 + next.size + } + /** Appends string representation of only this attribute to stringbuffer. */ protected def toString1(sb: StringBuilder) { diff --git a/src/library/scala/xml/MetaData.scala b/src/library/scala/xml/MetaData.scala index 9c603141d5..62d235ee12 100644 --- a/src/library/scala/xml/MetaData.scala +++ b/src/library/scala/xml/MetaData.scala @@ -141,10 +141,6 @@ abstract class MetaData extends Iterable[MetaData] with Equality with Serializab } protected def basisForHashCode: Seq[Any] = List(this.asAttrMap) - /** Returns an iterator on attributes */ - def iterator: Iterator[MetaData] = Iterator.single(this) ++ next.iterator - override def size: Int = 1 + iterator.length - /** filters this sequence of meta data */ override def filter(f: MetaData => Boolean): MetaData = if (f(this)) copy(next filter f) diff --git a/src/library/scala/xml/Null.scala b/src/library/scala/xml/Null.scala index 0db4a074c5..2c1c569a44 100644 --- a/src/library/scala/xml/Null.scala +++ b/src/library/scala/xml/Null.scala @@ -20,6 +20,7 @@ import scala.collection.Iterator */ case object Null extends MetaData { override def iterator = Iterator.empty + override def size = 0 override def append(m: MetaData, scope: NamespaceBinding = TopScope): MetaData = m override def filter(f: MetaData => Boolean): MetaData = this -- cgit v1.2.3