mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
SplHeap: Avoid memcpy on overlapping pointer
Check if data would overlap and also add an assert. Previous implementations didn't have this issue, as the direct assignment was used. Signed-off-by: Anatol Belski <ab@php.net>
This commit is contained in:
parent
525d8a8bfa
commit
afe14236e3
1 changed files with 5 additions and 1 deletions
|
@ -98,6 +98,7 @@ static zend_always_inline void *spl_heap_elem(spl_ptr_heap *heap, size_t i) {
|
|||
}
|
||||
|
||||
static zend_always_inline void spl_heap_elem_copy(spl_ptr_heap *heap, void *to, void *from) {
|
||||
assert(to != from);
|
||||
memcpy(to, from, heap->elem_size);
|
||||
}
|
||||
|
||||
|
@ -333,7 +334,10 @@ static int spl_ptr_heap_delete_top(spl_ptr_heap *heap, void *elem, void *cmp_use
|
|||
heap->flags |= SPL_HEAP_CORRUPTED;
|
||||
}
|
||||
|
||||
spl_heap_elem_copy(heap, spl_heap_elem(heap, i), bottom);
|
||||
void *to = spl_heap_elem(heap, i);
|
||||
if (to != bottom) {
|
||||
spl_heap_elem_copy(heap, to, bottom);
|
||||
}
|
||||
return SUCCESS;
|
||||
}
|
||||
/* }}} */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue