Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

XMLEventReader generates OutOfMemory Exception if XML file is not valid #4339

Closed
scabug opened this issue Mar 16, 2011 · 3 comments
Closed
Assignees
Milestone

Comments

@scabug
Copy link

scabug commented Mar 16, 2011

The XML-Pull parser does not handle invalid XML files very well.
The attached file contains incomplete XML data. When running this file through the parser, a lot of 'char's are allocated and not freed anymore until there is no free memory left which leads to an OOM.
The parser works very well with a complete, valid XML file of the same format and data.

This might be related to ticket #3840

You can easily reproduce the exception with the attached files:

Welcome to Scala version 2.9.0.r24458-b20110315020117 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_24).
Type in expressions to have them evaluated.
Type :help for more information.

scala> import scala.xml.pull.XMLEventReader
import scala.xml.pull.XMLEventReader

scala> import scala.io.Source
import scala.io.Source

scala> val parser = new XMLEventReader( Source.fromFile("intervals.SRER.xml.defect") )
parser: scala.xml.pull.XMLEventReader = non-empty iterator

scala> while (parser.hasNext) parser.next
Exception in thread "XMLEventReader" java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Arrays.java:2882)
	at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
	at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:572)
	at java.lang.StringBuilder.append(StringBuilder.java:203)
	at scala.collection.mutable.StringBuilder.append(StringBuilder.scala:252)
	at scala.xml.parsing.MarkupParserCommon$$class.xAttributeValue(MarkupParserCommon.scala:66)
	at scala.xml.pull.XMLEventReader$$Parser.xAttributeValue(XMLEventReader.scala:58)
	at scala.xml.parsing.MarkupParserCommon$$class.xAttributeValue(MarkupParserCommon.scala:74)
	at scala.xml.pull.XMLEventReader$$Parser.xAttributeValue(XMLEventReader.scala:58)
	at scala.xml.parsing.MarkupParser$$class.xAttributes(MarkupParser.scala:294)
	at scala.xml.pull.XMLEventReader$$Parser.xAttributes(XMLEventReader.scala:58)
	at scala.xml.parsing.MarkupParser$$class.mkAttributes(MarkupParser.scala:261)
	at scala.xml.pull.XMLEventReader$$Parser.mkAttributes(XMLEventReader.scala:58)
	at scala.xml.pull.XMLEventReader$$Parser.mkAttributes(XMLEventReader.scala:58)
	at scala.xml.parsing.MarkupParserCommon$$class.xTag(MarkupParserCommon.scala:44)
	at scala.xml.pull.XMLEventReader$$Parser.xTag(XMLEventReader.scala:58)
	at scala.xml.parsing.MarkupParser$$class.element1(MarkupParser.scala:528)
	at scala.xml.pull.XMLEventReader$$Parser.element1(XMLEventReader.scala:58)
	at scala.xml.parsing.MarkupParser$$class.content1(MarkupParser.scala:396)
	at scala.xml.pull.XMLEventReader$$Parser.content1(XMLEventReader.scala:58)
	at scala.xml.parsing.MarkupParser$$class.content(MarkupParser.scala:417)
	at scala.xml.pull.XMLEventReader$$Parser.content(XMLEventReader.scala:58)
	at scala.xml.parsing.MarkupParser$$class.element1(MarkupParser.scala:542)
	at scala.xml.pull.XMLEventReader$$Parser.element1(XMLEventReader.scala:58)
	at scala.xml.parsing.MarkupParser$$class.content1(MarkupParser.scala:396)
	at scala.xml.pull.XMLEventReader$$Parser.content1(XMLEventReader.scala:58)
	at scala.xml.parsing.MarkupParser$$class.content(MarkupParser.scala:417)
	at scala.xml.pull.XMLEventReader$$Parser.content(XMLEventReader.scala:58)
	at scala.xml.parsing.MarkupParser$$class.element1(MarkupParser.scala:542)
	at scala.xml.pull.XMLEventReader$$Parser.element1(XMLEventReader.scala:58)
	at scala.xml.parsing.MarkupParser$$class.content1(MarkupParser.scala:396)
	at scala.xml.pull.XMLEventReader$$Parser.content1(XMLEventReader.scala:58)

=== Additional information ===
Input file is attached to this ticket as bz2.

=== What versions of the following are you using? ===

  • Scala: 2.9.0.r24458-b20110315020117
  • Java: java version "1.6.0_24"
  • Operating system: Mac OS X 10.6
@scabug
Copy link
Author

scabug commented Mar 16, 2011

Imported From: https://issues.scala-lang.org/browse/SI-4339?orig=1
Reporter: Lukas Pustina (lukas.pustina)
Attachments:

@scabug
Copy link
Author

scabug commented Dec 23, 2014

@som-snytt said:
Coincidentally, just fixed by first commit in scala/scala-xml#44

@scabug
Copy link
Author

scabug commented Dec 24, 2014

@som-snytt said:
This turned out not be very educational: scala/scala#4221

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants