Skip to content

shmop_open should throw ValueError for ids overflowing sizeof int #9945

Open
@TysonAndre

Description

@TysonAndre

Description

The following code:

<?php // based on ext/shmop/tests/shmop_open_private.phpt
$write = 'test';

$shm1 = shmop_open(0x2_0000_0001, 'c', 0777, 1024);
shmop_write($shm1, $write, 0);

$shm2 = shmop_open(0x1_0000_0001, 'c', 0777, 1024);
$read = shmop_read($shm2, 0, 4);

var_dump(is_string($read) && $read !== $write);

Resulted in this output:

bool(false)

But I expected this output instead:

bool(true)

(seen on 64-bit linux with sizeof(int) == 4, sizeof(zend_long) == 8)

Not really something users are likely to do deliberately

This also means that 0x1_0000_0000 is an alias for IPC_PRIVATE, which always creates a new memory segment.

Noticed while looking into #9944

PHP Version

Any

Operating System

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions