From ef7b238e26785d19d5c0afeda5311c6cb4f306ae Mon Sep 17 00:00:00 2001 From: Haru Date: Sun, 15 Feb 2015 20:27:19 +0100 Subject: Fixed a parser issue on direct assignments - Fixes an undetected error in case a semicolon is missing after a direct assignment line in a script. - Special thanks to Dastgir. Signed-off-by: Haru --- src/map/script.c | 64 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 29 deletions(-) (limited to 'src/map/script.c') diff --git a/src/map/script.c b/src/map/script.c index 401cb0757..f5d4008c8 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -1322,8 +1322,15 @@ const char* parse_line(const char* p) // attempt to process a variable assignment p2 = script->parse_variable(p); - if( p2 != NULL ) - {// variable assignment processed so leave the method + if (p2 != NULL) { + // variable assignment processed so leave the method + if (script->parse_syntax_for_flag) { + if (*p2 != ')') + disp_error_message("parse_line: need ')'", p2); + } else { + if (*p2 != ';') + disp_error_message("parse_line: need ';'", p2); + } return script->parse_syntax_close(p2 + 1); } @@ -2382,34 +2389,33 @@ struct script_code* parse_script(const char *src,const char *file,int line,int o ShowMessage("\n"); #endif #ifdef SCRIPT_DEBUG_DISASM - { - int i = 0,j; - while(i < script->pos) { - c_op op = script->get_com(script->buf,&i); - - ShowMessage("%06x %s", i, script->op2name(op)); - j = i; - switch(op) { - case C_INT: - ShowMessage(" %d", script->get_num(script->buf,&i)); - break; - case C_POS: - ShowMessage(" 0x%06x", *(int*)(script->buf+i)&0xffffff); - i += 3; - break; - case C_NAME: - j = (*(int*)(script->buf+i)&0xffffff); - ShowMessage(" %s", ( j == 0xffffff ) ? "?? unknown ??" : script->get_str(j)); - i += 3; - break; - case C_STR: - j = strlen((char*)script->buf + i); - ShowMessage(" %s", script->buf + i); - i += j+1; - break; - } - ShowMessage(CL_CLL"\n"); + i = 0; + while(i < script->pos) { + int j = i; + c_op op = script->get_com(script->buf,&i); + + ShowMessage("%06x %s", i, script->op2name(op)); + j = i; + switch(op) { + case C_INT: + ShowMessage(" %d", script->get_num(script->buf,&i)); + break; + case C_POS: + ShowMessage(" 0x%06x", *(int*)(script->buf+i)&0xffffff); + i += 3; + break; + case C_NAME: + j = (*(int*)(script->buf+i)&0xffffff); + ShowMessage(" %s", ( j == 0xffffff ) ? "?? unknown ??" : script->get_str(j)); + i += 3; + break; + case C_STR: + j = (int)strlen((char*)script->buf + i); + ShowMessage(" %s", script->buf + i); + i += j+1; + break; } + ShowMessage(CL_CLL"\n"); } #endif -- cgit v1.2.3-60-g2f50