<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch master
in repository macports-base.

</pre>
<p><a href="https://github.com/macports/macports-base/commit/bd5f78dabd3495f6114713bc014dfbd8215cc662">https://github.com/macports/macports-base/commit/bd5f78dabd3495f6114713bc014dfbd8215cc662</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new bd5f78da Fix double frees when detaching registry
</span>bd5f78da is described below

<span style='display:block; white-space:pre;color:#808000;'>commit bd5f78dabd3495f6114713bc014dfbd8215cc662
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Sat Jun 12 14:24:02 2021 +1000

<span style='display:block; white-space:pre;color:#404040;'>    Fix double frees when detaching registry
</span>---
 src/cregistry/registry.c | 7 ++++++-
 src/registry2.0/file.c   | 5 ++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/cregistry/registry.c b/src/cregistry/registry.c
</span><span style='display:block; white-space:pre;color:#808080;'>index d73df603..5b4a8257 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/cregistry/registry.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/cregistry/registry.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -332,7 +332,12 @@ int reg_detach(reg_registry* reg, reg_error* errPtr) {
</span>                             curr != NULL; curr = Tcl_NextHashEntry(&search)) {
                         reg_file* file = Tcl_GetHashValue(curr);
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                        free(file->proc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        if (file->proc) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            free(file->proc);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                        /* The rest of the reg_file structure is not
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           cleaned up by delete_file, so this should
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                           always be safe. */
</span>                         free(file->key.path);
                         free(file);
                     }
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/registry2.0/file.c b/src/registry2.0/file.c
</span><span style='display:block; white-space:pre;color:#808080;'>index dd7dd65b..4a217768 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/registry2.0/file.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/registry2.0/file.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -66,8 +66,11 @@ static reg_file* get_file(Tcl_Interp* interp, char* name, reg_error* errPtr) {
</span> void delete_file(ClientData clientData) {
     reg_file* file = (reg_file*)clientData;
     free(file->proc);
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    free(file->key.path);
</span>     file->proc = NULL;
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* Not freeing file->key.path here. As long as 'file' exists in
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       reg->open_files, cregistry assumes it's valid and can return it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       in future. We can generate a new proc in that case but can't
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       figure out the path if it's gone. */
</span> }
 
 /**
</pre><pre style='margin:0'>

</pre>