From f95f07dad30a80b7e3eb4b2838ca4311d2822764 Mon Sep 17 00:00:00 2001 From: "Urabe, Shyouhei" Date: Fri, 26 Apr 2019 18:59:26 +0900 Subject: [PATCH] avoid passing NULL to memset `GC::Profiler.enable; GC::Profiler.clear` tries to clear objspace->profile.records but it has never been allocated before. Thus the MEMCPY took NULL argument before this changeset. The objspace->profile.records is allocated appropriately elsewhere. Why not juts free it if any? That should work. --- gc.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/gc.c b/gc.c index f1715de7b7..cf3bb3fac2 100644 --- a/gc.c +++ b/gc.c @@ -10476,16 +10476,14 @@ static VALUE gc_profile_clear(void) { rb_objspace_t *objspace = &rb_objspace; - if (GC_PROFILE_RECORD_DEFAULT_SIZE * 2 < objspace->profile.size) { - objspace->profile.size = GC_PROFILE_RECORD_DEFAULT_SIZE * 2; - objspace->profile.records = realloc(objspace->profile.records, sizeof(gc_profile_record) * objspace->profile.size); - if (!objspace->profile.records) { - rb_memerror(); - } - } - MEMZERO(objspace->profile.records, gc_profile_record, objspace->profile.size); + void *p = objspace->profile.records; + objspace->profile.records = NULL; + objspace->profile.size = 0; objspace->profile.next_index = 0; objspace->profile.current_record = 0; + if (p) { + free(p); + } return Qnil; }