summaryrefslogtreecommitdiff
path: root/TSRM
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2020-05-05 11:39:38 +0200
committerChristoph M. Becker <cmbecker69@gmx.de>2020-05-05 11:41:04 +0200
commit80b500619651901342c50b99bbd9e20715d390a9 (patch)
tree04e53b12e97ef8b16a9fc9e4289970bee7b3212e /TSRM
parented6bf0bc69d9bc241207f28679b4c4ddb057e9ff (diff)
parentf33cf52faf733f5a6441a533f83e9b1cf2018245 (diff)
downloadphp-git-80b500619651901342c50b99bbd9e20715d390a9.tar.gz
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3: Fix #79566: Private SHM is not private on Windows
Diffstat (limited to 'TSRM')
-rw-r--r--TSRM/tsrm_win32.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/TSRM/tsrm_win32.c b/TSRM/tsrm_win32.c
index 40331f122c..75240282f6 100644
--- a/TSRM/tsrm_win32.c
+++ b/TSRM/tsrm_win32.c
@@ -615,14 +615,16 @@ TSRM_API int shmget(key_t key, size_t size, int flags)
{/*{{{*/
shm_pair *shm;
char shm_segment[26], shm_info[29];
- HANDLE shm_handle, info_handle;
+ HANDLE shm_handle = NULL, info_handle = NULL;
BOOL created = FALSE;
- snprintf(shm_segment, sizeof(shm_segment), "TSRM_SHM_SEGMENT:%d", key);
- snprintf(shm_info, sizeof(shm_info), "TSRM_SHM_DESCRIPTOR:%d", key);
+ 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);
- shm_handle = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, shm_segment);
- info_handle = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, shm_info);
+ shm_handle = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, shm_segment);
+ info_handle = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, shm_info);
+ }
if (!shm_handle && !info_handle) {
if (flags & IPC_CREAT) {
@@ -633,8 +635,8 @@ TSRM_API int shmget(key_t key, size_t size, int flags)
DWORD high = 0;
DWORD low = size;
#endif
- shm_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, high, low, shm_segment);
- info_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(shm->descriptor), shm_info);
+ shm_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, high, low, key == IPC_PRIVATE ? NULL : shm_segment);
+ info_handle = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, sizeof(shm->descriptor), key == IPC_PRIVATE ? NULL : shm_info);
created = TRUE;
}
if (!shm_handle || !info_handle) {