summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2025-01-27 11:57:42 -0500
committerPeter Zhu <peter@peterzhu.ca>2025-01-27 13:26:26 -0500
commitcb9aeb283bc07de1c2f73aae3616f9e50a65326a (patch)
treee50cc757fa8867bc0fa281b029532a89e180d88a
parentfeec48ae2b3241540fc61047252a5e83e5185e07 (diff)
Fix gc_update_references_weak_table_i for ASAN
If the object is a T_MOVED, then it is poisoned in ASAN, so we need to unpoison it before checking the type.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/12644
-rw-r--r--gc/default/default.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/gc/default/default.c b/gc/default/default.c
index ccfcefaba3..0377331a05 100644
--- a/gc/default/default.c
+++ b/gc/default/default.c
@@ -7113,7 +7113,11 @@ gc_ref_update(void *vstart, void *vend, size_t stride, rb_objspace_t *objspace,
static int
gc_update_references_weak_table_i(VALUE obj, void *data)
{
- return BUILTIN_TYPE(obj) == T_MOVED ? ST_REPLACE : ST_CONTINUE;
+ int ret;
+ asan_unpoisoning_object(obj) {
+ ret = BUILTIN_TYPE(obj) == T_MOVED ? ST_REPLACE : ST_CONTINUE;
+ }
+ return ret;
}
static int