From 5d5efb75e8dcded9a4a1fb7b6e1fbed686f4766f Mon Sep 17 00:00:00 2001 From: rdb Date: Sat, 2 Jan 2021 18:43:10 +0100 Subject: [PATCH] egg: Fix egg lexer hanging on unterminated quote or C-style comment --- panda/src/egg/lexer.cxx.prebuilt | 8 ++++---- panda/src/egg/lexer.lxx | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/panda/src/egg/lexer.cxx.prebuilt b/panda/src/egg/lexer.cxx.prebuilt index f0b0a2b4ec..06e6dd0123 100644 --- a/panda/src/egg/lexer.cxx.prebuilt +++ b/panda/src/egg/lexer.cxx.prebuilt @@ -1195,12 +1195,12 @@ scan_quoted_string() { int c; c = read_char(line, col); - while (c != '"' && c != EOF) { + while (c != '"' && c != 0 && c != EOF) { result += c; c = read_char(line, col); } - if (c == EOF) { + if (c == 0 || c == EOF) { eggyyerror("This quotation mark is unterminated."); } @@ -1224,7 +1224,7 @@ eat_c_comment() { last_c = '\0'; c = read_char(line, col); - while (c != EOF && !(last_c == '*' && c == '/')) { + while (c != 0 && c != EOF && !(last_c == '*' && c == '/')) { if (last_c == '/' && c == '*') { std::ostringstream errmsg; errmsg << "This comment contains a nested /* symbol at line " @@ -1236,7 +1236,7 @@ eat_c_comment() { c = read_char(line, col); } - if (c == EOF) { + if (c == 0 || c == EOF) { eggyyerror("This comment marker is unclosed."); } diff --git a/panda/src/egg/lexer.lxx b/panda/src/egg/lexer.lxx index 88aed62e46..c4b6f88028 100644 --- a/panda/src/egg/lexer.lxx +++ b/panda/src/egg/lexer.lxx @@ -250,12 +250,12 @@ scan_quoted_string() { int c; c = read_char(line, col); - while (c != '"' && c != EOF) { + while (c != '"' && c != 0 && c != EOF) { result += c; c = read_char(line, col); } - if (c == EOF) { + if (c == 0 || c == EOF) { eggyyerror("This quotation mark is unterminated."); } @@ -279,7 +279,7 @@ eat_c_comment() { last_c = '\0'; c = read_char(line, col); - while (c != EOF && !(last_c == '*' && c == '/')) { + while (c != 0 && c != EOF && !(last_c == '*' && c == '/')) { if (last_c == '/' && c == '*') { std::ostringstream errmsg; errmsg << "This comment contains a nested /* symbol at line " @@ -291,7 +291,7 @@ eat_c_comment() { c = read_char(line, col); } - if (c == EOF) { + if (c == 0 || c == EOF) { eggyyerror("This comment marker is unclosed."); }