diff --git a/NEWS b/NEWS index 91968149918..caefb507892 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,9 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? ????, PHP 8.1.0RC2 +- Shmop: + . Fixed bug #81407 (shmop_open won't attach and causes php to crash). (cmb) + - Opcache: . Fixed bug #81409 (Incorrect JIT code for ADD with a reference to array). (Dmitry) diff --git a/TSRM/tsrm_win32.c b/TSRM/tsrm_win32.c index 77ec864575a..cfe344e377e 100644 --- a/TSRM/tsrm_win32.c +++ b/TSRM/tsrm_win32.c @@ -609,16 +609,20 @@ TSRM_API int pclose(FILE *stream) return termstat; }/*}}}*/ +#define SEGMENT_PREFIX "TSRM_SHM_SEGMENT:" +#define DESCRIPTOR_PREFIX "TSRM_SHM_DESCRIPTOR:" +#define INT_MIN_AS_STRING "-2147483648" + TSRM_API int shmget(key_t key, size_t size, int flags) {/*{{{*/ shm_pair *shm; - char shm_segment[26], shm_info[29]; + char shm_segment[sizeof(SEGMENT_PREFIX INT_MIN_AS_STRING)], shm_info[sizeof(DESCRIPTOR_PREFIX INT_MIN_AS_STRING)]; HANDLE shm_handle = NULL, info_handle = NULL; BOOL created = FALSE; if (key != IPC_PRIVATE) { - snprintf(shm_segment, sizeof(shm_segment), "TSRM_SHM_SEGMENT:%d", key); - snprintf(shm_info, sizeof(shm_info), "TSRM_SHM_DESCRIPTOR:%d", key); + snprintf(shm_segment, sizeof(shm_segment), SEGMENT_PREFIX "%d", key); + snprintf(shm_info, sizeof(shm_info), DESCRIPTOR_PREFIX "%d", key); shm_handle = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, shm_segment); info_handle = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, shm_info); diff --git a/ext/shmop/tests/bug81407.phpt b/ext/shmop/tests/bug81407.phpt new file mode 100644 index 00000000000..468e19c09e4 --- /dev/null +++ b/ext/shmop/tests/bug81407.phpt @@ -0,0 +1,19 @@ +--TEST-- +Bug #81407 (shmop_open won't attach and causes php to crash) +--SKIPIF-- + +--FILE-- + +--EXPECT-- +bool(true) +bool(true)