Edit report at http://bugs.php.net/bug.php?id=48400&edit=1
ID: 48400 Comment by: slim at inbox dot lv Reported by: dkelsey at uk dot ibm dot com Summary: imap crashes when closing stream opened with OP_PROTOTYPE option Status: Closed Type: Bug Package: IMAP related Operating System: * PHP Version: 5.*, 6CVS (2009-05-26) Assigned To: jani Block user comment: N Private report: N New Comment: looks like this bug still present in PHP 5.3.5 (fpm-fcgi): Core was generated by `php-fpm: pool www'. Program terminated with signal 11, Segmentation fault. #0 0x083dc3fe in mail_close_full () (gdb) bt #0 0x083dc3fe in mail_close_full () #1 0x0817d2fe in mail_close_it () #2 0x083404e4 in list_entry_destructor () #3 0x0833d17c in zend_hash_apply_deleter () #4 0x0833d417 in zend_hash_graceful_reverse_destroy () #5 0x0834035d in zend_destroy_rsrc_list () #6 0x08331276 in zend_deactivate () #7 0x082d9fd8 in php_request_shutdown () #8 0x083c61f6 in main () Previous Comments: ------------------------------------------------------------------------ [2009-08-03 13:03:30] j...@php.net This bug has been fixed in SVN. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. Thank you for the report, and for helping us make PHP better. ------------------------------------------------------------------------ [2009-08-03 13:02:53] s...@php.net Automatic comment from SVN on behalf of jani Revision: http://svn.php.net/viewvc/?view=revision&revision=286732 Log: - Fixed bug #48400 (imap crashes when closing stream opened with OP_PROTOTYPE flag) ------------------------------------------------------------------------ [2009-07-26 12:13:04] j...@php.net This is really funny. Why can't he add some checks in those funcs that they won't do anything if one passes them a prototype stream? I guess we need to cover that as well. And not do try closing those streams then. ------------------------------------------------------------------------ [2009-07-02 11:37:13] dkel...@php.net re-opening the original bug as new bug raised was closed a bogus. ------------------------------------------------------------------------ [2009-07-02 06:25:58] dkelsey at uk dot ibm dot com I sent an email to the c-client mailing list and the response I got states clearly that it is a php problem as php is not using the mail apis correctly. Here is the response -------------------------------------------------------------------- Hi Dave - This is not a bug. Rather, you have misunderstood some important points. There are three issues with your sample program. [1] You SHOULD include c-client.h, and not mail.h directly. mail.h has most, but not all, of the consumer API definitions and prototypes. [2] You MUST (repeat, MUST!!) include linkage.c at the start of your main() function instead of calling mail_link() directly. [3] A prototype stream is not something that can be given to mail_close_full(). Without knowing why you are opening a prototype stream, it appears to me that you do not understand what a prototype stream is and how/why it is used; especially since this is an IMAP prototype stream, something which is almost completely useless except for internal c-client purposes. A prototype stream is not a stream. The closest analog to a prototype stream would be a factory object or class definition. Internally, a prototype stream is simply a pointer to a static area of constant memory that has the dtb for that driver. Prototype streams have VERY limited use to API consumers. The primary consumer use is that of a local filesystem format prototype stream as an argument to mail_create() to force the created mailbox to be in that format. However, that use is deprecated in favor of the #driver.???/ prefix; e.g., mail_create (NIL,"#driver.mix/newbox"); is the preferred and more modern way of doing mail_create (mail_open (NIL,existingmixmailbox,OP_PROTOTYPE),"newbox"); The prototype stream method is the way to create a new local filesystem mailbox of the same format as an existing local filesystem mailbox, as opposed to a specified format via the #driver.???/ syntax . This is therefore the 99% reason why any API consumer would use a prototype stream. Your use may be in the remaining 1% (it would have to be, given that it's an IMAP prototype stream), but I suspect that it's really a case of your not understanding what you are doing. Getting back to the subject at hand; since it is a factory object (or class definition), it is inappropriate to call non-factory methods on it. For most API consumers, other than mail_create() with a local filesystem driver prototype, the remaining uses are power tools for master sorcerers. mail_close() and mail_close_full() are completely inappropriate methods to use with a prototype stream, even for a master sorcerer. A prototype stream is not a stream, and is not something that can be closed. When you are finished with a prototype stream, you just drop the pointer. -- Mark -- -------------------------------------------------------------------- >From the response, maybe the best solution is to just remove to OP_PROTOTYPE option, but the response does seem to indicate there could be other issues hiding away. ------------------------------------------------------------------------ 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=48400 -- Edit this bug report at http://bugs.php.net/bug.php?id=48400&edit=1