summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-07-29 22:36:19 -0700
committerKaz Kylheku <kaz@kylheku.com>2015-07-29 22:36:19 -0700
commitb6955812c33d432557b93fe4638b411ff944334b (patch)
treed48b5668cbb7159ec8661aa2b179d42f34aa203a
parentc439d4bb117ebcc59bd34711326ebb5090b2da2a (diff)
downloadtxr-b6955812c33d432557b93fe4638b411ff944334b.tar.gz
txr-b6955812c33d432557b93fe4638b411ff944334b.tar.bz2
txr-b6955812c33d432557b93fe4638b411ff944334b.zip
* gc.c (finalize): Null out cobj handle after calling the
destructor. This can catch some use-after-free errors.
-rw-r--r--ChangeLog5
-rw-r--r--gc.c1
2 files changed, 6 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index df1a8512..cbec2a8c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2015-07-29 Kaz Kylheku <kaz@kylheku.com>
+ * gc.c (finalize): Null out cobj handle after calling the
+ destructor. This can catch some use-after-free errors.
+
+2015-07-29 Kaz Kylheku <kaz@kylheku.com>
+
* stream.c (common_destroy): Function removed.
(stdio_stream_destroy, dir_destroy): Call close_stream directly.
diff --git a/gc.c b/gc.c
index 4965066a..8a870cb2 100644
--- a/gc.c
+++ b/gc.c
@@ -254,6 +254,7 @@ static void finalize(val obj)
return;
case COBJ:
obj->co.ops->destroy(obj);
+ obj->co.handle = 0;
return;
case BGNUM:
mp_clear(mp(obj));