mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +02:00
Fix NULL arithmetic in System V shared memory emulation
For the first child process execution, `TWG(shm)` is `NULL`; we need to catch that to avoid undefined behavior. Closes GH-17550.
This commit is contained in:
parent
3a52aba20c
commit
2e02cdfb5f
2 changed files with 15 additions and 11 deletions
2
NEWS
2
NEWS
|
@ -15,6 +15,8 @@ PHP NEWS
|
|||
. Fixed bug GH-17408 (Assertion failure Zend/zend_exceptions.c).
|
||||
(nielsdos, ilutov)
|
||||
. Fix may_have_extra_named_args flag for ZEND_AST_UNPACK. (nielsdos)
|
||||
. Fix NULL arithmetic in System V shared memory emulation for Windows. (cmb)
|
||||
|
||||
|
||||
- DOM:
|
||||
. Fixed bug GH-17500 (Segfault with requesting nodeName on nameless doctype).
|
||||
|
|
|
@ -402,19 +402,21 @@ static shm_pair *shm_get(key_t key, void *addr)
|
|||
shm_pair *ptr;
|
||||
shm_pair *newptr;
|
||||
|
||||
for (ptr = TWG(shm); ptr < (TWG(shm) + TWG(shm_size)); ptr++) {
|
||||
if (!ptr->descriptor) {
|
||||
continue;
|
||||
if (TWG(shm) != NULL) {
|
||||
for (ptr = TWG(shm); ptr < (TWG(shm) + TWG(shm_size)); ptr++) {
|
||||
if (!ptr->descriptor) {
|
||||
continue;
|
||||
}
|
||||
if (!addr && ptr->descriptor->shm_perm.key == key) {
|
||||
break;
|
||||
} else if (ptr->addr == addr) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!addr && ptr->descriptor->shm_perm.key == key) {
|
||||
break;
|
||||
} else if (ptr->addr == addr) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ptr < (TWG(shm) + TWG(shm_size))) {
|
||||
return ptr;
|
||||
if (ptr < (TWG(shm) + TWG(shm_size))) {
|
||||
return ptr;
|
||||
}
|
||||
}
|
||||
|
||||
newptr = (shm_pair*)realloc((void*)TWG(shm), (TWG(shm_size)+1)*sizeof(shm_pair));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue