From: Michael Poole Date: Mon, 22 Nov 2010 12:31:01 +0000 (-0500) Subject: Complain properly about unterminated comments in config files. X-Git-Url: http://git.pk910.de/?p=srvx.git;a=commitdiff_plain;h=5808de1e3e2db867ac9138a971d1d7e6b5ca5015 Complain properly about unterminated comments in config files. sylar noticed that unterminated comments would often cause an infinite loop in the config parser. src/recdb.c (fail_codes): Add UNTERMINATED_COMMENT value. (parse_skip_ws): Abort with that on EOF inside a comment. (failure_reason): Handle UNTERMINATED_COMMENT. --- diff --git a/src/recdb.c b/src/recdb.c index 8f4e8c5..9b8ac14 100644 --- a/src/recdb.c +++ b/src/recdb.c @@ -109,6 +109,7 @@ ABORT(RECDB *recdb, int code, unsigned char ch) { enum fail_codes { UNTERMINATED_STRING, + UNTERMINATED_COMMENT, EXPECTED_OPEN_QUOTE, EXPECTED_OPEN_BRACE, EXPECTED_OPEN_PAREN, @@ -345,8 +346,10 @@ parse_skip_ws(RECDB *recdb) do { do { c = dbgetc(recdb); - } while (c != '*' && c != EOF); + if (c == EOF) ABORT(recdb, UNTERMINATED_COMMENT, c); + } while (c != '*'); if ((c = dbgetc(recdb)) == '/') in_comment = 0; + if (c == EOF) ABORT(recdb, UNTERMINATED_COMMENT, c); } while (in_comment); } else if (d == '/') { /* C++ style comment, with slash slash comment newline */ @@ -552,6 +555,7 @@ failure_reason(int code) const char *reason; switch (code >> 8) { case UNTERMINATED_STRING: reason = "Unterminated string"; break; + case UNTERMINATED_COMMENT: reason = "Unterminated comment"; break; case EXPECTED_OPEN_QUOTE: reason = "Expected '\"'"; break; case EXPECTED_OPEN_BRACE: reason = "Expected '{'"; break; case EXPECTED_OPEN_PAREN: reason = "Expected '('"; break;