Commit 77017959 authored by Yukihiro Matsumoto's avatar Yukihiro Matsumoto

unterminated string detection made easy

parent 2ed31892
...@@ -20,31 +20,26 @@ is_code_block_open(struct mrb_parser_state *parser) ...@@ -20,31 +20,26 @@ is_code_block_open(struct mrb_parser_state *parser)
{ {
int code_block_open = FALSE; int code_block_open = FALSE;
/* check for unterminated string */
if (parser->sterm) return TRUE;
/* check if parser error are available */ /* check if parser error are available */
if (0 < parser->nerr) { if (0 < parser->nerr) {
const char *unexpected_end = "syntax error, unexpected $end"; const char *unexpected_end = "syntax error, unexpected $end";
const char *message = parser->error_buffer[0].message;
/* a parser error occur, we have to check if */ /* a parser error occur, we have to check if */
/* we need to read one more line or if there is */ /* we need to read one more line or if there is */
/* a different issue which we have to show to */ /* a different issue which we have to show to */
/* the user */ /* the user */
if (strncmp(parser->error_buffer[0].message, unexpected_end, strlen(unexpected_end)) == 0) { if (strncmp(message, unexpected_end, strlen(unexpected_end)) == 0) {
code_block_open = TRUE;
}
else if (strcmp(parser->error_buffer[0].message,
"syntax error, unexpected keyword_end") == 0) {
code_block_open = TRUE;
}
else if (strcmp(parser->error_buffer[0].message,
"syntax error, unexpected $end, expecting keyword_then or ';' or '\\n'") == 0) {
code_block_open = TRUE; code_block_open = TRUE;
} }
else if (strcmp(parser->error_buffer[0].message, else if (strcmp(message, "syntax error, unexpected keyword_end") == 0) {
"syntax error, unexpected tREGEXP_BEG") == 0) {
code_block_open = TRUE; code_block_open = TRUE;
} }
else if (strcmp(parser->error_buffer[0].message, else if (strcmp(message, "syntax error, unexpected tREGEXP_BEG") == 0) {
"unterminated string meets end of file") == 0) {
code_block_open = TRUE; code_block_open = TRUE;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment