php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #70546 ext/sysvshm: two broken tests on Solaris
Submitted: 2015-09-21 14:40 UTC Modified: -
From: rainer dot jung at kippdata dot de Assigned:
Status: Closed Package: Unknown/Other Function
PHP Version: 7.0.0RC3 OS: Solaris
Private report: No CVE-ID: None
View Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
If you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: rainer dot jung at kippdata dot de
New email:
PHP Version: OS:

 

 [2015-09-21 14:40 UTC] rainer dot jung at kippdata dot de
Description:
------------
Tests ext/sysvshm/tests/002.phpt and ext/sysvshm/tests/007.phpt are both broken on Solaris. Solaris does not allow to remove a shred memory segment twice in the same process. So when doing two calls to shm_remove() for the same segment, the second fails with errno 22 (Invalid argument). This can easily be reproduced using a simple C program. On linux calling shm_remove() twice is allowed. The standards docs for shmctl with param IPC_RMID (that is what sits underneath PHP shm_remove()) say:

<quote>Remove the shared memory identifier specified by shmid from the system and destroy the shared memory segment and shmid_ds data structure associated with it. IPC_RMID can only be executed by a process that has an effective user ID equal to either that of a process with appropriate privileges or to the value of shm_perm.cuid or shm_perm.uid in the shmid_ds data structure associated with shmid.</quote>

So IMHO the linux behavior is more luck than expected.

The problem shows up in ext/sysvshm/tests/002.phpt, failing because of the output

Warning: shm_remove(): failed for key 0x7406e291, id -37354056: Invalid argument in /path/to/ext/sysvshm/tests/002.php on line 21

I think that failure might be actually side effect of a typo. The test contains:

     19 var_dump($s = shm_attach($key, -1));
     20 shm_remove($s);
     21 var_dump(shm_attach($key, 0));
     22 shm_remove($s);

and if you alter it to

     19 var_dump($s = shm_attach($key, -1));
     20 shm_remove($s);
     21 var_dump($s = shm_attach($key, 0));
     22 shm_remove($s);


(adding "$s = " for the second shm_attach) the test passes.

The second failing test is ext/sysvshm/tests/007.phpt. The message is

Warning: shm_remove(): failed for key 0x7406ef15, id -37354344: Invalid argument in /path/to/ext/sysvshm/tests/007.php on line 12

and the problem is:

     10
     11 var_dump(shm_remove($s));
     12 var_dump(shm_remove($s));
     13

so the test tries to remove the same shm twice. That might be intended, but it is not guaranteed to work on all platforms. I don't actually see a reason for that part of the test, so I suggets to drop line 12.

Please see the attached patch with the fixes for the two tests.

The problem and patch applies to the latest releases of PHP 5.4-5.6 and 7 RC 3.



Patches

php-sysvshm-shm_remove-twice (last revision 2015-09-21 14:42 UTC by rainer dot jung at kippdata dot de)

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2015-09-22 04:07 UTC] laruence@php.net
Automatic comment on behalf of laruence@gmail.com
Revision: http://git.php.net/?p=php-src.git;a=commit;h=b8ea991821753898ba30fa170b25eadd3fc703b2
Log: Fixed bug #70546 (ext/sysvshm: two broken tests on Solaris) by rainer.jung
 [2015-09-22 04:07 UTC] laruence@php.net
-Status: Open +Status: Closed
 [2015-09-29 13:10 UTC] ab@php.net
Automatic comment on behalf of laruence@gmail.com
Revision: http://git.php.net/?p=php-src.git;a=commit;h=b8ea991821753898ba30fa170b25eadd3fc703b2
Log: Fixed bug #70546 (ext/sysvshm: two broken tests on Solaris) by rainer.jung
 [2016-07-20 11:36 UTC] davey@php.net
Automatic comment on behalf of laruence@gmail.com
Revision: http://git.php.net/?p=php-src.git;a=commit;h=b8ea991821753898ba30fa170b25eadd3fc703b2
Log: Fixed bug #70546 (ext/sysvshm: two broken tests on Solaris) by rainer.jung
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Dec 08 03:01:28 2024 UTC