From 9c7426987750f120eb7c875a9a4121ce956f6ca1 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 10 Apr 2014 10:09:55 -0600 Subject: [PATCH] compile: fix namespace leak related to submodules and compilation A reference intended to be temporary from a submodule to its enclosing module wasn't NULLed out. --- racket/src/racket/src/module.c | 2 ++ racket/src/racket/src/schpriv.h | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/racket/src/racket/src/module.c b/racket/src/racket/src/module.c index 6a826e2a09..369d1c2ce4 100644 --- a/racket/src/racket/src/module.c +++ b/racket/src/racket/src/module.c @@ -7599,6 +7599,8 @@ static Scheme_Object *do_module(Scheme_Object *form, Scheme_Comp_Env *env, menv->post_ex_rename_set = NULL; } + m->submodule_ancestry = NULL; /* ancestry no longer needed; NULL to avoid leak */ + LOG_END_EXPAND(m); SCHEME_EXPAND_OBSERVE_RENAME_ONE(rec[drec].observer, fm); diff --git a/racket/src/racket/src/schpriv.h b/racket/src/racket/src/schpriv.h index 69c925b690..c8ed0eb22c 100644 --- a/racket/src/racket/src/schpriv.h +++ b/racket/src/racket/src/schpriv.h @@ -3367,7 +3367,7 @@ typedef struct Scheme_Module Scheme_Object *pre_submodules, *post_submodules; /* list of modules (when compiled or loaded as a group) */ Scheme_Object *pre_submodule_names; /* list of symbols (in expand mode) */ Scheme_Object *supermodule; /* supermodule for which this is in {pre,post}_submodules */ - Scheme_Object *submodule_ancestry; /* se by compile/expand, temporary */ + Scheme_Object *submodule_ancestry; /* set by compile/expand, temporary */ } Scheme_Module; typedef struct Scheme_Module_Phase_Exports