Edit report at http://bugs.php.net/bug.php?id=44683&edit=1
ID: 44683 Updated by: paj...@php.net Reported by: d_kelsey at uk dot ibm dot com Summary: popen with modes such as "e" or "er" cause php.exe to crash Status: Closed Type: Bug Package: Reproducible crash Operating System: win32 only - Windows XP PHP Version: 5.2.8 Assigned To: pajoye Block user comment: N New Comment: There is another report about the error message. It is due to a mix usage of Win32 APIs and ansi/posix-like API, but only the error system for the latter is used. Previous Comments: ------------------------------------------------------------------------ [2010-09-21 16:08:09] tony dot dziedzic at oracle dot com If a caller specifies an invalid mode argument (e.g., "w+"), this change results in the message "PHP Warning: popen(...) No error in <script> on line <number>". It would be helpful if the message displayed was something more indicative of the user's error than "No error". ------------------------------------------------------------------------ [2009-08-26 20:05:33] paj...@php.net Fixed in 5.2, 5.3 and HEAD. It was bug in the Windows VC6 CRT, the same code works well on any recent windows (vista, 2008, win7). fdopen crashes when an invalid mode is given. ------------------------------------------------------------------------ [2009-08-26 19:57:02] s...@php.net Automatic comment from SVN on behalf of pajoye Revision: http://svn.php.net/viewvc/?view=revision&revision=287779 Log: - fix #44683, popen crashes when an invalid mode is passed (works on 2k8/vista/win7) ------------------------------------------------------------------------ [2009-01-19 17:51:32] d_kelsey at uk dot ibm dot com This is still a problem in php528. The crash looks like it is due to a bug in the Microsoft C runtime library when calling _fdopen and the type being passed to it is "e". I think popen_ex in tsrm_win32.c should check that the first byte is either "w" or "r" and if not raise a php warning "invalid argument". Then it should check if the 2nd byte is present and if so it should only allow "b" or "t" anything else should also raise a php warning "invalid argument". This should then bring php.net on windows in line with what happens on php.net for linux. ------------------------------------------------------------------------ [2008-04-18 12:51:46] d_kelsey at uk dot ibm dot com fails on latest snapshot. Backtrace is > ntdll.dll!7c9010f3() [Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] msvcrt.dll!77c3b974() msvcrt.dll!77c3eb23() msvcrt.dll!77c3eb13() msvcrt.dll!77c2e556() php5ts.dll!popen_ex(const char * command=0x0122c9c0, const char * type=0x0122db18, const char * cwd=0x00301cc0, char * env=0x00000000) Line 239 C php5ts.dll!virtual_popen(const char * command=0x0122c9c0, const char * type=0x0122db18, void * * * tsrm_ls=0x00301c80) Line 1172 + 0x24 bytes C php5ts.dll!zif_popen(int ht=19015924, _zval_struct * return_value=0x0122c9f0, _zval_struct * * return_value_ptr=0x00000000, _zval_struct * this_ptr=0x00000000, int return_value_used=1, void * * * tsrm_ls=0x00301c80) Line 986 + 0x10 bytes C php5ts.dll!zend_do_fcall_common_helper_SPEC(_zend_execute_data * execute_data=0x00c0fbd0, void * * * tsrm_ls=0x00301c80) Line 200 + 0x3d bytes C php5ts.dll!ZEND_DO_FCALL_SPEC_CONST_HANDLER(_zend_execute_data * execute_data=0x00000000, void * * * tsrm_ls=0x00301c80) Line 1679 + 0xe bytes C php5ts.dll!execute(_zend_op_array * op_array=0x00000008, void * * * tsrm_ls=0x00301c80) Line 92 + 0xc bytes C php5ts.dll!php_execute_script(_zend_file_handle * primary_file=0x00c0fec8, void * * * tsrm_ls=0x00301c80) Line 2005 + 0x12 bytes C php.exe!main(int argc=2, char * * argv=0x00301cf0) Line 1141 C php.exe!_mainCRTStartup() + 0xe3 bytes kernel32.dll!7c816fd7() ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/bug.php?id=44683 -- Edit this bug report at http://bugs.php.net/bug.php?id=44683&edit=1