From 6a577106ced2b0680e7a51b75a7d5227d43f241a Mon Sep 17 00:00:00 2001 From: Nadeeshan96 Date: Thu, 9 Nov 2023 17:20:18 +0530 Subject: [PATCH 1/2] Fix OOM error with parsing XML CData --- .../java/io/ballerina/runtime/internal/XmlTreeBuilder.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bvm/ballerina-runtime/src/main/java/io/ballerina/runtime/internal/XmlTreeBuilder.java b/bvm/ballerina-runtime/src/main/java/io/ballerina/runtime/internal/XmlTreeBuilder.java index 7d1748bd58e9..7a287cdaa070 100644 --- a/bvm/ballerina-runtime/src/main/java/io/ballerina/runtime/internal/XmlTreeBuilder.java +++ b/bvm/ballerina-runtime/src/main/java/io/ballerina/runtime/internal/XmlTreeBuilder.java @@ -128,6 +128,8 @@ public BXml parse() { readComment(xmlStreamReader); break; case CDATA: + readCData(xmlStreamReader); + break; case CHARACTERS: readText(xmlStreamReader); readNext = true; @@ -158,6 +160,10 @@ private void readPI(XMLStreamReader xmlStreamReader) { siblingDeque.peek().add(xmlItem); } + private void readCData(XMLStreamReader xmlStreamReader) { + siblingDeque.peek().add(new XmlText(xmlStreamReader.getText())); + } + private void readText(XMLStreamReader xmlStreamReader) throws XMLStreamException { StringBuilder textBuilder = new StringBuilder(); while (xmlStreamReader.getEventType() == CHARACTERS) { From 2d4d92cfceb8c4d2cc9b0ad26069c5110f0599a5 Mon Sep 17 00:00:00 2001 From: Nadeeshan96 Date: Thu, 9 Nov 2023 17:51:19 +0530 Subject: [PATCH 2/2] Add test with XML CData --- .../langlib-test/src/test/resources/test-src/xmllib_test.bal | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/langlib/langlib-test/src/test/resources/test-src/xmllib_test.bal b/langlib/langlib-test/src/test/resources/test-src/xmllib_test.bal index 34843030f15b..794e26c793db 100644 --- a/langlib/langlib-test/src/test/resources/test-src/xmllib_test.bal +++ b/langlib/langlib-test/src/test/resources/test-src/xmllib_test.bal @@ -943,6 +943,10 @@ function fromStringTest() { if !(d[3] is xml:Comment) { panic error("Assertion error: not a comment"); } + + string xmlString = string ``; + xml xmlWithCData = checkpanic xml:fromString(xmlString); + assertEquals(xmlWithCData, xml `OK`); } function testXmlIteratorNextInvocations() {