From 96d6d277a453a602b9ec49131d8e332ce7aefcad Mon Sep 17 00:00:00 2001 From: Francis Lavoie Date: Tue, 5 May 2020 14:32:12 -0400 Subject: [PATCH] caddyconfig: Don't start comments in middle of tokens (#3267) * caddyconfig: Only parse # as start of comment if preceded by space * caddyconfig: Simplify # logic using len(val), add a test --- caddyconfig/caddyfile/formatter.go | 3 --- caddyconfig/caddyfile/formatter_test.go | 9 +++++++-- caddyconfig/caddyfile/lexer.go | 2 +- caddyconfig/caddyfile/lexer_test.go | 20 ++++++++++++++++++++ 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/caddyconfig/caddyfile/formatter.go b/caddyconfig/caddyfile/formatter.go index 2c97f3b09..627054166 100644 --- a/caddyconfig/caddyfile/formatter.go +++ b/caddyconfig/caddyfile/formatter.go @@ -131,9 +131,6 @@ func Format(input []byte) []byte { ////////////////////////////////////////////////////////// if ch == '#' { - if !spacePrior && !beginningOfLine { - write(' ') - } comment = true } diff --git a/caddyconfig/caddyfile/formatter_test.go b/caddyconfig/caddyfile/formatter_test.go index 25bd7fa87..6751ecaac 100644 --- a/caddyconfig/caddyfile/formatter_test.go +++ b/caddyconfig/caddyfile/formatter_test.go @@ -201,7 +201,7 @@ c } d { - e #f + e#f # g } @@ -229,7 +229,7 @@ bar" j { "\"k\" l m" }`, - expect: `"a \"b\" " #c + expect: `"a \"b\" "#c d e { @@ -305,6 +305,11 @@ bar "{\"key\":34}"`, baz`, }, + { + description: "hash within string is not a comment", + input: `redir / /some/#/path`, + expect: `redir / /some/#/path`, + }, } { // the formatter should output a trailing newline, // even if the tests aren't written to expect that diff --git a/caddyconfig/caddyfile/lexer.go b/caddyconfig/caddyfile/lexer.go index d9968ff8d..568d15cbf 100755 --- a/caddyconfig/caddyfile/lexer.go +++ b/caddyconfig/caddyfile/lexer.go @@ -141,7 +141,7 @@ func (l *lexer) next() bool { continue } - if ch == '#' { + if ch == '#' && len(val) == 0 { comment = true } if comment { diff --git a/caddyconfig/caddyfile/lexer_test.go b/caddyconfig/caddyfile/lexer_test.go index 734006e3b..c8c941a99 100755 --- a/caddyconfig/caddyfile/lexer_test.go +++ b/caddyconfig/caddyfile/lexer_test.go @@ -77,6 +77,26 @@ func TestLexer(t *testing.T) { {Line: 6, Text: "}"}, }, }, + { + input: `host:123 { + # hash inside string is not a comment + redir / /some/#/path + }`, + expected: []Token{ + {Line: 1, Text: "host:123"}, + {Line: 1, Text: "{"}, + {Line: 3, Text: "redir"}, + {Line: 3, Text: "/"}, + {Line: 3, Text: "/some/#/path"}, + {Line: 4, Text: "}"}, + }, + }, + { + input: "# comment at beginning of file\n# comment at beginning of line\nhost:123", + expected: []Token{ + {Line: 3, Text: "host:123"}, + }, + }, { input: `a "quoted value" b foobar`,