X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=blobdiff_plain;f=ftepp.c;h=a1b5f07e9a446321966707dde62f08b068b9efa4;hp=68491ed6dd2af72e1c8e69035b6e48bce5384a35;hb=3f40fcb9658f2f1c86ee04df05d47c4fdfe21f51;hpb=d27c06ea7fb9f55ea4014851af2b219732b657ef diff --git a/ftepp.c b/ftepp.c index 68491ed..a1b5f07 100644 --- a/ftepp.c +++ b/ftepp.c @@ -124,7 +124,7 @@ char *ftepp_predef_line(lex_file *context) { char *ftepp_predef_file(lex_file *context) { size_t length = strlen(context->name) + 3; /* two quotes and a terminator */ char *value = (char*)mem_a(length); - sprintf(value, "\"%s\"", context->name); + snprintf(value, length, "\"%s\"", context->name); return value; } @@ -471,7 +471,7 @@ static bool ftepp_define_body(ftepp_t *ftepp, ppmacro *macro) static bool ftepp_define(ftepp_t *ftepp) { - ppmacro *macro; + ppmacro *macro = NULL; size_t l = ftepp_ctx(ftepp).line; (void)ftepp_next(ftepp); @@ -492,7 +492,7 @@ static bool ftepp_define(ftepp_t *ftepp) break; default: ftepp_error(ftepp, "expected macro name"); - return false; + goto cleanup_false; } (void)ftepp_next(ftepp); @@ -500,14 +500,14 @@ static bool ftepp_define(ftepp_t *ftepp) if (ftepp->token == '(') { macro->has_params = true; if (!ftepp_define_params(ftepp, macro)) - return false; + goto cleanup_false; } if (!ftepp_skipspace(ftepp)) - return false; + goto cleanup_false; if (!ftepp_define_body(ftepp, macro)) - return false; + goto cleanup_false; if (ftepp->output_on) vec_push(ftepp->macros, macro); @@ -518,6 +518,10 @@ static bool ftepp_define(ftepp_t *ftepp) for (; l < ftepp_ctx(ftepp).line; ++l) ftepp_out(ftepp, "\n", true); return true; + +cleanup_false: + if (macro) ppmacro_delete(macro); + return false; } /** @@ -830,7 +834,7 @@ static bool ftepp_macro_expand(ftepp_t *ftepp, ppmacro *macro, macroparam *param if (resetline && !ftepp->in_macro) { char lineno[128]; - sprintf(lineno, "\n#pragma line(%lu)\n", (unsigned long)(old_lexer->sline)); + snprintf(lineno, 128, "\n#pragma line(%lu)\n", (unsigned long)(old_lexer->sline)); ftepp_out(ftepp, lineno, false); } @@ -1796,12 +1800,12 @@ bool ftepp_init() minor[2] = '"'; } else if (OPTS_OPTION_U32(OPTION_STANDARD) == COMPILER_GMQCC) { ftepp_add_define(NULL, "__STD_GMQCC__"); - sprintf(major, "\"%d\"", GMQCC_VERSION_MAJOR); - sprintf(minor, "\"%d\"", GMQCC_VERSION_MINOR); + snprintf(major, 32, "\"%d\"", GMQCC_VERSION_MAJOR); + snprintf(minor, 32, "\"%d\"", GMQCC_VERSION_MINOR); } else if (OPTS_OPTION_U32(OPTION_STANDARD) == COMPILER_QCCX) { ftepp_add_define(NULL, "__STD_QCCX__"); - sprintf(major, "\"%d\"", GMQCC_VERSION_MAJOR); - sprintf(minor, "\"%d\"", GMQCC_VERSION_MINOR); + snprintf(major, 32, "\"%d\"", GMQCC_VERSION_MAJOR); + snprintf(minor, 32, "\"%d\"", GMQCC_VERSION_MINOR); } else if (OPTS_OPTION_U32(OPTION_STANDARD) == COMPILER_QCC) { ftepp_add_define(NULL, "__STD_QCC__"); /* 1.0 */