Skip to content

Commit 8dadca8

Browse files
committed
Hide offset encoding magic in ZEND_MAP_PTR_IS_OFFSET(), ZEND_MAP_PTR_OFFSET2PTR() and ZEND_MAP_PTR_PTR2OFFSET() macros.
1 parent 9ef07c8 commit 8dadca8

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

Zend/zend.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1676,7 +1676,7 @@ ZEND_API void *zend_map_ptr_new(void)
16761676
#if ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR
16771677
return ptr;
16781678
#elif ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR_OR_OFFSET
1679-
return (void*)((CG(map_ptr_last) * sizeof(void*)) - (sizeof(void*) - 1));
1679+
return ZEND_MAP_PTR_PTR2OFFSET(ptr);
16801680
#else
16811681
# error "Unknown ZEND_MAP_PTR_KIND"
16821682
#endif

Zend/zend_map_ptr.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,19 @@
5151
ptr ## __ptr
5252
# define ZEND_MAP_PTR_DEF(type, name) \
5353
type * ZEND_MAP_PTR(name)
54+
# define ZEND_MAP_PTR_IS_OFFSET(ptr) \
55+
(((uintptr_t)ZEND_MAP_PTR(ptr)) & 1L)
56+
# define ZEND_MAP_PTR_OFFSET2PTR(ptr) \
57+
((void**)((char*)CG(map_ptr_base) + (uintptr_t)ZEND_MAP_PTR(ptr) - 1))
58+
# define ZEND_MAP_PTR_PTR2OFFSET(ptr) \
59+
((void*)((uintptr_t)(((char*)(ptr)) - ((char*)CG(map_ptr_base))) | 1L))
5460
# define ZEND_MAP_PTR_GET(ptr) \
55-
((((uintptr_t)ZEND_MAP_PTR(ptr)) & 1L) ? \
56-
*(void**)((char*)CG(map_ptr_base) + (uintptr_t)ZEND_MAP_PTR(ptr) - 1) : \
61+
(ZEND_MAP_PTR_IS_OFFSET(ptr) ? \
62+
*(ZEND_MAP_PTR_OFFSET2PTR(ptr)) : \
5763
(void*)(*(ZEND_MAP_PTR(ptr))))
5864
# define ZEND_MAP_PTR_SET(ptr, val) do { \
59-
if (((uintptr_t)ZEND_MAP_PTR(ptr)) & 1L) { \
60-
*(void**)((char*)CG(map_ptr_base) + (uintptr_t)ZEND_MAP_PTR(ptr) - 1) = (val); \
65+
if (ZEND_MAP_PTR_IS_OFFSET(ptr)) { \
66+
*(ZEND_MAP_PTR_OFFSET2PTR(ptr)) = (val); \
6167
} else { \
6268
*(ZEND_MAP_PTR(ptr)) = (val); \
6369
} \

0 commit comments

Comments
 (0)