chainlint.sed: don't mistake `<< word` in string as here-doc operator
commit22597af97d67660fb3f0dba538a1f02b1ba94243
authorEric Sunshine <sunshine@sunshineco.com>
Mon, 13 Dec 2021 06:30:56 +0000 (13 01:30 -0500)
committerJunio C Hamano <gitster@pobox.com>
Mon, 13 Dec 2021 22:15:29 +0000 (13 14:15 -0800)
tree6950a948a7fd5ab9aa11dd5297c5b0143d62f555
parent2d53614210919c2a4eac4a03e9d34da7b9e7ff31
chainlint.sed: don't mistake `<< word` in string as here-doc operator

Tighten here-doc recognition to prevent it from being fooled by text
which looks like a here-doc operator but happens merely to be the
content of a string, such as this real-world case from t7201:

    echo "<<<<<<< ours" &&
    echo ourside &&
    echo "=======" &&
    echo theirside &&
    echo ">>>>>>> theirs"

This problem went unnoticed because chainlint.sed is not a real parser,
but rather applies heuristics to pretend to understand shell code. In
this case, it saw what it thought was a here-doc operator (`<< ours`),
and fell off the end of the test looking for the closing tag "ours"
which it never found, thus swallowed the remainder of the test without
checking it for &&-chain breakage.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/chainlint.sed
t/chainlint/not-heredoc.expect [new file with mode: 0644]
t/chainlint/not-heredoc.test [new file with mode: 0644]