<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>