Fixes #27: Reject full 00 - 1F unicode range
This commit is contained in:
@@ -423,7 +423,11 @@ func (l *tomlLexer) lexString() tomlLexStateFn {
|
|||||||
return l.errorf("invalid escape sequence: \\" + string(l.peek()))
|
return l.errorf("invalid escape sequence: \\" + string(l.peek()))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
growingString += string(l.peek())
|
r := l.peek()
|
||||||
|
if 0x00 <= r && r <= 0x1F {
|
||||||
|
return l.errorf("unescaped control character %U", r)
|
||||||
|
}
|
||||||
|
growingString += string(r)
|
||||||
}
|
}
|
||||||
|
|
||||||
if l.next() == eof {
|
if l.next() == eof {
|
||||||
|
|||||||
+31
-4
@@ -463,6 +463,19 @@ func TestKeyEqualStringUnicodeEscape(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestKeyEqualStringNoEscape(t *testing.T) {
|
||||||
|
testFlow(t, "foo = \"hello \u0002\"", []token{
|
||||||
|
token{Position{1, 1}, tokenKey, "foo"},
|
||||||
|
token{Position{1, 5}, tokenEqual, "="},
|
||||||
|
token{Position{1, 8}, tokenError, "unescaped control character U+0002"},
|
||||||
|
})
|
||||||
|
testFlow(t, "foo = \"hello \u001F\"", []token{
|
||||||
|
token{Position{1, 1}, tokenKey, "foo"},
|
||||||
|
token{Position{1, 5}, tokenEqual, "="},
|
||||||
|
token{Position{1, 8}, tokenError, "unescaped control character U+001F"},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestLiteralString(t *testing.T) {
|
func TestLiteralString(t *testing.T) {
|
||||||
testFlow(t, `foo = 'C:\Users\nodejs\templates'`, []token{
|
testFlow(t, `foo = 'C:\Users\nodejs\templates'`, []token{
|
||||||
token{Position{1, 1}, tokenKey, "foo"},
|
token{Position{1, 1}, tokenKey, "foo"},
|
||||||
@@ -514,19 +527,33 @@ func TestMultilineString(t *testing.T) {
|
|||||||
token{Position{1, 34}, tokenEOF, ""},
|
token{Position{1, 34}, tokenEOF, ""},
|
||||||
})
|
})
|
||||||
|
|
||||||
testFlow(t, "foo = \"\"\"\nhello\n\"literal\"\nworld\"\"\"", []token{
|
testFlow(t, "foo = \"\"\"\nhello\\\n\"literal\"\\\nworld\"\"\"", []token{
|
||||||
token{Position{1, 1}, tokenKey, "foo"},
|
token{Position{1, 1}, tokenKey, "foo"},
|
||||||
token{Position{1, 5}, tokenEqual, "="},
|
token{Position{1, 5}, tokenEqual, "="},
|
||||||
token{Position{2, 1}, tokenString, "hello\n\"literal\"\nworld"},
|
token{Position{2, 1}, tokenString, "hello\"literal\"world"},
|
||||||
token{Position{4, 9}, tokenEOF, ""},
|
token{Position{4, 9}, tokenEOF, ""},
|
||||||
})
|
})
|
||||||
|
|
||||||
testFlow(t, "foo = \"\"\"\\\n \\\n \\\n hello\nmultiline\nworld\"\"\"", []token{
|
testFlow(t, "foo = \"\"\"\\\n \\\n \\\n hello\\\nmultiline\\\nworld\"\"\"", []token{
|
||||||
token{Position{1, 1}, tokenKey, "foo"},
|
token{Position{1, 1}, tokenKey, "foo"},
|
||||||
token{Position{1, 5}, tokenEqual, "="},
|
token{Position{1, 5}, tokenEqual, "="},
|
||||||
token{Position{1, 10}, tokenString, "hello\nmultiline\nworld"},
|
token{Position{1, 10}, tokenString, "hellomultilineworld"},
|
||||||
token{Position{6, 9}, tokenEOF, ""},
|
token{Position{6, 9}, tokenEOF, ""},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
testFlow(t, "key2 = \"\"\"\nThe quick brown \\\n\n\n fox jumps over \\\n the lazy dog.\"\"\"", []token{
|
||||||
|
token{Position{1, 1}, tokenKey, "key2"},
|
||||||
|
token{Position{1, 6}, tokenEqual, "="},
|
||||||
|
token{Position{2, 1}, tokenString, "The quick brown fox jumps over the lazy dog."},
|
||||||
|
token{Position{6, 21}, tokenEOF, ""},
|
||||||
|
})
|
||||||
|
|
||||||
|
testFlow(t, "key2 = \"\"\"\\\n The quick brown \\\n fox jumps over \\\n the lazy dog.\\\n \"\"\"", []token{
|
||||||
|
token{Position{1, 1}, tokenKey, "key2"},
|
||||||
|
token{Position{1, 6}, tokenEqual, "="},
|
||||||
|
token{Position{1, 11}, tokenString, "The quick brown fox jumps over the lazy dog."},
|
||||||
|
token{Position{5, 11}, tokenEOF, ""},
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUnicodeString(t *testing.T) {
|
func TestUnicodeString(t *testing.T) {
|
||||||
|
|||||||
Reference in New Issue
Block a user