Thanks to visit codestin.com
Credit goes to github.com

Skip to content

fix: heredocs in lines with escaped newlines#87

Merged
lorenzo merged 1 commit intohadolint:masterfrom
m-ildefons:fix/hadolint-923-heredoc-linebreaks
Jan 30, 2023
Merged

fix: heredocs in lines with escaped newlines#87
lorenzo merged 1 commit intohadolint:masterfrom
m-ildefons:fix/hadolint-923-heredoc-linebreaks

Conversation

@m-ildefons
Copy link
Member

Fix parsing error with heredocs within command chains with escaped newlines.

When chaining commands in a RUN instructions, it is possible that one of the middle commands takes a heredoc. It is often convenient to also break up the resulting long line with escapes, e.g.:

RUN foo \
 && bar <<EOF >> bar.txt \
 && baz
inside heredoc
content
EOF

The heredoc parser should not fail on escaped newlines in this command chain.
This requires two modifications:

  • Parsing the rest of the command chain, after a heredoc should not end on the literal '\n' character, but should be done with the untilEol parser, which respects the escaped newlins
  • Parsing the command chain before the heredoc requires casting escaped newlines to spaces as to not fail the parser on a '\n' character

This approach works with the caveat that the command chain after the heredoc is ignored and will not end up in the parsed text.

fixes: hadolint/hadolint#923
Signed-off-by: Moritz Röhrich [email protected]

Fix parsing error with heredocs within command chains with escaped
newlines.

When chaining commands in a `RUN` instructions, it is possible that one
of the middle commands takes a heredoc. It is often convenient to also
break up the resulting long line with escapes, e.g.:

```Dockerfile
RUN foo \
 && bar <<EOF >> bar.txt \
 && baz
inside heredoc
content
EOF
```

The heredoc parser should not fail on escaped newlines in this command
chain.
This requires two modifications:

  - Parsing the rest of the command chain, after a heredoc should not
    end on the literal '\n' character, but should be done with the
    `untilEol` parser, which respects the escaped newlins
  - Parsing the command chain before the heredoc requires casting
    escaped newlines to spaces as to not fail the parser on a '\n'
    character

This approach works with the caveat that the command chain after the
heredoc is ignored and will not end up in the parsed text.

fixes: hadolint/hadolint#923
Signed-off-by: Moritz Röhrich <[email protected]>
@m-ildefons m-ildefons requested a review from lorenzo January 30, 2023 10:01
@lorenzo
Copy link
Member

lorenzo commented Jan 30, 2023

great job!

@lorenzo lorenzo merged commit 34e9ddf into hadolint:master Jan 30, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

heredoc unexpected is not a supported rule

2 participants