summaryrefslogtreecommitdiffstats
path: root/src/lexer.in.cc
diff options
context:
space:
mode:
authorEvan Martin <martine@danga.com>2012-07-18 00:38:48 (GMT)
committerEvan Martin <martine@danga.com>2012-07-18 00:38:48 (GMT)
commit8a37bfffcbea27ffbb9168b2740476336cd4963a (patch)
tree858b58f1fb26898be995f6540eb03430ad8e2130 /src/lexer.in.cc
parent42163db5edfd6865a05226af23f99aef3622f550 (diff)
downloadNinja-8a37bfffcbea27ffbb9168b2740476336cd4963a.zip
Ninja-8a37bfffcbea27ffbb9168b2740476336cd4963a.tar.gz
Ninja-8a37bfffcbea27ffbb9168b2740476336cd4963a.tar.bz2
disallow crlf in manifest files
It turns out to be trickier than expected to process these correctly. It turns out to also be trickier than expected to give a nice error message on encountering these. But the behavior prior to this patch would just be silent failures where we attempted to examine paths that accidentally contained embedded \r. For now, fix all regexes of the form [^...] to include \r in the excluded block, then assert that we get a vague lexer error near the problem. In the future perhaps we can open manifest files in text mode on Windows or just disallow Windows-style CRLF in the manual.
Diffstat (limited to 'src/lexer.in.cc')
-rw-r--r--src/lexer.in.cc4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/lexer.in.cc b/src/lexer.in.cc
index e478921..852d6e9 100644
--- a/src/lexer.in.cc
+++ b/src/lexer.in.cc
@@ -130,7 +130,7 @@ Lexer::Token Lexer::ReadToken() {
simple_varname = [a-zA-Z0-9_-]+;
varname = [a-zA-Z0-9_.-]+;
- [ ]*"#"[^\000\n]*"\n" { continue; }
+ [ ]*"#"[^\000\r\n]*"\n" { continue; }
[ ]*[\n] { token = NEWLINE; break; }
[ ]+ { token = INDENT; break; }
"build" { token = BUILD; break; }
@@ -200,7 +200,7 @@ bool Lexer::ReadEvalString(EvalString* eval, bool path, string* err) {
for (;;) {
start = p;
/*!re2c
- [^$ :\n|\000]+ {
+ [^$ :\r\n|\000]+ {
eval->AddText(StringPiece(start, p - start));
continue;
}