Fix use-after-free in Modula-2 middle-end's em_m2

Partly fixes https://github.com/davidgiven/ack/issues/262
This commit is contained in:
tkchia 2022-08-01 17:48:54 +00:00
parent 3757b4ad03
commit 14c386561a

View file

@ -112,10 +112,11 @@ static void chk_forw(struct def **pdf)
register struct def *df; register struct def *df;
while ( (df = *pdf) ) { while ( (df = *pdf) ) {
if (df->df_kind == D_FORWTYPE) { while (df->df_kind == D_FORWTYPE) {
pdf = &df->df_nextinscope; register struct def *df2 = df->df_nextinscope;
pdf = NULL;
ForceForwardTypeDef(df); /* removes df */ ForceForwardTypeDef(df); /* removes df */
continue; df = df2;
} }
if (df->df_kind & (D_FORWARD|D_FORWMODULE)) { if (df->df_kind & (D_FORWARD|D_FORWMODULE)) {
/* These definitions must be found in /* These definitions must be found in
@ -138,7 +139,8 @@ df->df_idf->id_text);
nextvisible(CurrVis); nextvisible(CurrVis);
register struct def *df1 = lookup(df->df_idf, ls->sc_scope, 0, 0); register struct def *df1 = lookup(df->df_idf, ls->sc_scope, 0, 0);
*pdf = df->df_nextinscope; if (pdf)
*pdf = df->df_nextinscope;
if (! df1) { if (! df1) {
if (df->df_kind == D_FORWMODULE) { if (df->df_kind == D_FORWMODULE) {