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

Reply via email to