소스 검색

fix undefined behavior in free

Alexander Monakov 7 년 전
부모
커밋
60ab365cae
1개의 변경된 파일3개의 추가작업 그리고 2개의 파일을 삭제
  1. 3 2
      src/malloc/malloc.c

+ 3 - 2
src/malloc/malloc.c

@@ -450,14 +450,15 @@ copy_realloc:
 
 void free(void *p)
 {
-	struct chunk *self = MEM_TO_CHUNK(p);
-	struct chunk *next;
+	struct chunk *self, *next;
 	size_t final_size, new_size, size;
 	int reclaim=0;
 	int i;
 
 	if (!p) return;
 
+	self = MEM_TO_CHUNK(p);
+
 	if (IS_MMAPPED(self)) {
 		size_t extra = self->psize;
 		char *base = (char *)self - extra;