php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #64214 PHAR PHPTs intermittently crash when run on DFS or SMB
Submitted: 2013-02-14 23:52 UTC Modified: 2013-05-17 09:52 UTC
Votes:1
Avg. Score:3.0 ± 0.0
Reproduced:0 of 0 (0.0%)
From: mattficken@php.net Assigned: pajoye
Status: Assigned Package: PHAR related
PHP Version: 5.5.0alpha4 OS: Windows
Private report: No CVE-ID:
Have you experienced this issue?
Rate the importance of this bug to you:

 [2013-02-14 23:52 UTC] mattficken@php.net
Description:
------------
I am running PHPT tests on an SMB file share (and also sometimes DFS) served by a remote file server. The share is mounted to a local drive (H:) on Windows. This issue occurs on Windows 7, Vista, 2008, 2008r2, 8, 2012, x64 and x86 (I am using the PHP on Windows binary build from windows.php.net without any modification).

When I run these 2 PHAR tests, sometimes, they crash:
ext/phar/tests/zip/phar_commitwrite.phpt
ext/phar/tests/tar/phar_setsignaturealgo2.phpt

See attached BTs.

If I add additional traffic to the network or file server (ex: download a big file on another computer), the crashes happen more frequently. Even then, I'm only adding max ~10MiB/S to network or file server which isn't really heavy load.

The file access times on the share are still pretty normal (fraction of a second max, to read a PHPT file, so the network or file server is never heavily loaded).

I believe this is a time issue that is load induced.


Actual result:
--------------
ext/phar/tests/zip/phar_commitwrite.phpt
               php5ts.dll!_php_stream_write(_php_stream * stream, const char * buf, unsigned int count, void * * * tsrm_ls)  Line 1233 + 0x10 bytes              C
              php5ts.dll!phar_zip_flush(_phar_archive_data * phar, char * user_stub, long len, int defaultstub, char * * error, void * * * tsrm_ls)  Line 1304 + 0x18 bytes         C
              php5ts.dll!phar_flush(_phar_archive_data * phar, char * user_stub, long len, int convert, char * * error, void * * * tsrm_ls)  Line 2601 + 0x18 bytes           C
              php5ts.dll!phar_add_file(_phar_archive_data * * pphar, char * filename, int filename_len, char * cont_str, int cont_len, _zval_struct * zresource, void * * * tsrm_ls)  Line 3737 + 0x11 bytes    C
              php5ts.dll!zim_Phar_offsetSet(int ht, _zval_struct * return_value, _zval_struct * * return_value_ptr, _zval_struct * this_ptr, int return_value_used, void * * * tsrm_ls)  Line 3818 + 0x14 bytes     C
              php5ts.dll!zend_call_function(_zend_fcall_info * fci, _zend_fcall_info_cache * fci_cache, void * * * tsrm_ls)  Line 959 + 0x1f bytes           C
              php5ts.dll!zend_call_method(_zval_struct * * object_pp, _zend_class_entry * obj_ce, _zend_function * * fn_proxy, const char * function_name, int function_name_len, _zval_struct * * retval_ptr_ptr, int param_count, _zval_struct * arg1, _zval_struct * arg2, void * * * tsrm_ls)  Line 97 + 0x14 bytes           C
              php5ts.dll!zend_std_write_dimension(_zval_struct * object, _zval_struct * offset, _zval_struct * value, void * * * tsrm_ls)  Line 678 + 0x1e bytes C
              php5ts.dll!ZEND_ASSIGN_DIM_SPEC_CV_CONST_HANDLER(_zend_execute_data * execute_data, void * * * tsrm_ls)  Line 32607 + 0xbc bytes               C
 
ext/phar/tests/tar/phar_setsignaturealgo2.phpt
 
               php5ts.dll!user_wrapper_opener(_php_stream_wrapper * wrapper, char * filename, char * mode, int options, char * * opened_path, _php_stream_context * context, void * * * tsrm_ls)  Line 346 + 0x2f bytes               C
              php5ts.dll!_php_stream_open_wrapper_ex(char * path, char * mode, int options, char * * opened_path, _php_stream_context * context, void * * * tsrm_ls)  Line 2054 + 0x24 bytes  C
              php5ts.dll!php_if_fopen(int ht, _zval_struct * return_value, _zval_struct * * return_value_ptr, _zval_struct * this_ptr, int return_value_used, void * * * tsrm_ls)  Line 869 + 0x1a bytes       C
              php5ts.dll!phar_fopen(int ht, _zval_struct * return_value, _zval_struct * * return_value_ptr, _zval_struct * this_ptr, int return_value_used, void * * * tsrm_ls)  Line 418 + 0x22 bytes       C
              php5ts.dll!zend_do_fcall_common_helper_SPEC(_zend_execute_data * execute_data, void * * * tsrm_ls)  Line 542 + 0x5e bytes             C
              php5ts.dll!ZEND_DO_FCALL_SPEC_CONST_HANDLER(_zend_execute_data * execute_data, void * * * tsrm_ls)  Line 2305 + 0xb bytes C
              php5ts.dll!execute_ex(_zend_execute_data * execute_data, void * * * tsrm_ls)  Line 356 + 0xa bytes     C
              php5ts.dll!zend_execute(_zend_op_array * op_array, void * * * tsrm_ls)  Line 381 + 0x1bc bytes     C
              php5ts.dll!zend_execute_scripts(int type, void * * * tsrm_ls, _zval_struct * * retval, int file_count, ...)  Line 1317               C
              php5ts.dll!php_execute_script(_zend_file_handle * primary_file, void * * * tsrm_ls)  Line 2478 + 0x12 bytes       C
              php5apache2_4.dll!php_handler(request_rec * r)  Line 667 + 0xe bytes        C
 


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2013-02-27 10:35 UTC] user at kkdf2 dot sakura dot ne dot jp
About NAS, it may be possible.

For example,
My company's NAS Buffalo Ls-L series freezes sometimes when I try simultaneous client accesses.
It seems that NAS exhausts its ram memory by operating multiple file requests.
 [2013-05-14 22:34 UTC] pajoye@php.net
Crashes should be fixed by now (testing) but the reason why tmp files creations 
fail has to be analyzed and fixed as well. Assigned to me.
 [2013-05-14 22:34 UTC] pajoye@php.net
-Status: Open +Status: Assigned -Assigned To: +Assigned To: pajoye
 [2013-05-17 09:52 UTC] pajoye@php.net
I think I found all locations causing these crashes. Matt, let me know once the 
last serie of tests pass (stress and compat) so we can close it :)
 [2013-05-24 21:24 UTC] mattficken@php.net
I haven't seen this bug repro on any recent 5.3, 5.4, or 5.5 snapshot builds.

I think this bug is fixed.


I have added a documentation note about the importance of setting the `sys_temp_dir` directive, especially when using remote file systems: http://us3.php.net/manual/en/book.phar.php
 
PHP Copyright © 2001-2014 The PHP Group
All rights reserved.
Last updated: Sun Apr 20 05:03:19 2014 UTC