ballerina-platform / ballerina-lang

The Ballerina Programming Language
https://ballerina.io/
Apache License 2.0
3.58k stars 738 forks source link

[Bug]: XML parser crashes for DOCTYPE definition #41522

Open HindujaB opened 10 months ago

HindujaB commented 10 months ago

Description

$subject

Steps to Reproduce

import ballerina/io;

public function main() {
    xml res = xml `<!DOCTYPE html/> <html>
            <head>
                <title>Dynamic Table</title>
            </head>
            </html>`;
    io:println(res);
}

The above crashes at compilation

Compiling source
        hinduja/temp_test:0.1.0

Running executable

 <html>
            <head>
                <title>Dynamic Table</title>
            </head>
            </html>
hinduja@Hinduja temp_test % bal run
Compiling source
        hinduja/temp_test:0.1.0
ballerina: Oh no, something really went wrong. Bad. Sad.

We appreciate it if you can report the code that broke Ballerina in
https://github.com/ballerina-platform/ballerina-lang/issues with the
log you get below and your sample code.

We thank you for helping make us better.

[2023-10-15 18:22:06,242] SEVERE {b7a.log.crash} - null 
java.lang.IllegalStateException
        at io.ballerina.compiler.internal.parser.XMLParser.parseXMLCharacterSet(XMLParser.java:693)
        at io.ballerina.compiler.internal.parser.XMLParser.parseAttributeValue(XMLParser.java:408)
        at io.ballerina.compiler.internal.parser.XMLParser.parseXMLAttribute(XMLParser.java:370)
        at io.ballerina.compiler.internal.parser.XMLParser.parseXMLElementStartOrEmptyTag(XMLParser.java:181)
        at io.ballerina.compiler.internal.parser.XMLParser.parseXMLElement(XMLParser.java:149)
        at io.ballerina.compiler.internal.parser.XMLParser.parseXMLContentItem(XMLParser.java:109)
        at io.ballerina.compiler.internal.parser.XMLParser.parseXMLContent(XMLParser.java:64)
        at io.ballerina.compiler.internal.parser.XMLParser.parse(XMLParser.java:47)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseTemplateContentAsXML(BallerinaParser.java:11129)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseXMLTemplateExpression(BallerinaParser.java:11080)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseTerminalExpression(BallerinaParser.java:5157)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseTerminalExpression(BallerinaParser.java:5077)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseTerminalExpression(BallerinaParser.java:5071)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseExpression(BallerinaParser.java:5049)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseExpression(BallerinaParser.java:5044)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseExpression(BallerinaParser.java:5039)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseActionOrExpression(BallerinaParser.java:4979)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseVarDeclRhs(BallerinaParser.java:4628)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseVarDeclRhs(BallerinaParser.java:4602)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseStmtStartsWithTypedBPOrExprRhs(BallerinaParser.java:15595)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseStmtStartsWithTypeOrExpr(BallerinaParser.java:15588)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseStatement(BallerinaParser.java:4493)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseStatement(BallerinaParser.java:4368)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseStatement(BallerinaParser.java:4330)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseFunctionBodyBlock(BallerinaParser.java:3003)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseFunctionBody(BallerinaParser.java:2966)
        at io.ballerina.compiler.internal.parser.BallerinaParser.createFunctionDefinition(BallerinaParser.java:1527)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseFuncDefOrMethodDeclEnd(BallerinaParser.java:1438)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseFunctionDefinition(BallerinaParser.java:1330)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseFuncDefOrFuncTypeDescRhs(BallerinaParser.java:1356)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseFunctionKeywordRhs(BallerinaParser.java:1389)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseFuncDefOrFuncTypeDesc(BallerinaParser.java:1320)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseTopLevelNode(BallerinaParser.java:973)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseTopLevelNode(BallerinaParser.java:961)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseTopLevelNode(BallerinaParser.java:604)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseTopLevelNode(BallerinaParser.java:536)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parseCompUnit(BallerinaParser.java:440)
        at io.ballerina.compiler.internal.parser.BallerinaParser.parse(BallerinaParser.java:102)
        at io.ballerina.compiler.syntax.tree.SyntaxTree.from(SyntaxTree.java:55)
        at io.ballerina.projects.DocumentContext.parse(DocumentContext.java:89)
        at io.ballerina.projects.DocumentContext.syntaxTree(DocumentContext.java:96)
        at io.ballerina.projects.Document.syntaxTree(Document.java:55)
        at io.ballerina.projects.util.ProjectUtils.getPackageImports(ProjectUtils.java:198)
        at io.ballerina.projects.util.ProjectUtils.getPackageImports(ProjectUtils.java:187)
        at io.ballerina.cli.task.CompileTask.execute(CompileTask.java:111)
        at io.ballerina.cli.TaskExecutor.executeTasks(TaskExecutor.java:40)
        at io.ballerina.cli.cmd.RunCommand.execute(RunCommand.java:223)
        at java.base/java.util.Optional.ifPresent(Optional.java:178)
        at io.ballerina.cli.launcher.Main.main(Main.java:58)

Affected Version(s)

2201.8.1

OS, DB, other environment details and versions

No response

Related area

-> Compilation

Related issue(s) (optional)

No response

Suggested label(s) (optional)

No response

Suggested assignee(s) (optional)

No response

poorna2152 commented 5 months ago

Created spec issue for clarification.