rcjsuen / dockerfile-language-service

Dockerfile language service for providing an API to create feature-rich Dockerfile editors in JavaScript.
MIT License
16 stars 2 forks source link

Semantic tokens calculation enters infinite loop if a variable is followed by an escape character #96

Closed rcjsuen closed 2 years ago

rcjsuen commented 2 years ago
const lib = require("dockerfile-language-service");
const service = lib.DockerfileLanguageServiceFactory.createLanguageService();
service.computeSemanticTokens("FROM $abc\\\ndef");
node_modules/dockerfile-ast/lib/imageTemplate.js:116
        for (let instruction of this.instructions) {
                                     ^

RangeError: Maximum call stack size exceeded
    at Array.values (<anonymous>)
    at Dockerfile.getFROMs (node_modules/dockerfile-ast/lib/imageTemplate.js:116:38)
    at Dockerfile.resolveVariable (node_modules/dockerfile-ast/lib/dockerfile.js:81:31)
    at From.parseVariables (node_modules/dockerfile-ast/lib/instruction.js:545:348)
    at From.getVariables (node_modules/dockerfile-ast/lib/instruction.js:370:42)
    at DockerSemanticTokens.createToken (out/src/dockerSemanticTokens.js:490:48)
    at DockerSemanticTokens.createToken (out/src/dockerSemanticTokens.js:429:50)
    at DockerSemanticTokens.createToken (out/src/dockerSemanticTokens.js:501:26)
    at DockerSemanticTokens.createToken (out/src/dockerSemanticTokens.js:429:50)
    at DockerSemanticTokens.createToken (out/src/dockerSemanticTokens.js:501:26)
rcjsuen commented 2 years ago

This is what the Dockerfile looks like in the example code.

FROM $abc\
def