#47940 [Opn->Csd]: imap_body() leaks memory

From: Date: Thu, 23 Apr 2009 22:35:58 +0000
Subject: #47940 [Opn->Csd]: imap_body() leaks memory
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-136185@lists.php.net to get a copy of this message
ID: 47940 Updated by: pajoye@php.net Reported By: jake dot levitt at mailtrust dot com -Status: Open +Status: Closed Bug Type: IMAP related Operating System: Ubuntu 8.04 (linux:2.6.24-21) PHP Version: 5.2.9 New Comment: Slightly modified version committed in all branches. Thanks for your work! Previous Comments: ------------------------------------------------------------------------ [2009-04-23 21:37:27] jake dot levitt at mailtrust dot com Here's a unified diff: diff -u php-5.2.9/ext/imap/php_imap.c php-5.2.9-fixed/ext/imap/php_imap.c --- php-5.2.9/ext/imap/php_imap.c 2008-12-31 06:17:38.000000000 -0500 +++ php-5.2.9-fixed/ext/imap/php_imap.c 2009-04-23 13:56:26.000000000 -0400 @@ -1250,7 +1250,10 @@ RETURN_FALSE; } - RETVAL_STRING(mail_fetchtext_full (imap_le_struct->imap_stream, Z_LVAL_PP(msgno), NIL, myargc==3 ? Z_LVAL_PP(pflags) : NIL), 1); + char *body = mail_fetchtext_full (imap_le_struct->imap_stream, Z_LVAL_PP(msgno), NIL, myargc==3 ? Z_LVAL_PP(pflags) : NIL); + + RETVAL_STRING(body, 1); + free(body); } /* }}} */ ------------------------------------------------------------------------ [2009-04-23 21:03:39] scottmac@php.net Can you provide the patch as a unified diff, just use the -u flag to cvs diff. ------------------------------------------------------------------------ [2009-04-23 19:05:24] jake dot levitt at mailtrust dot com A co-worker and I have created a diff that seems to fix this issue. Would someone else mind checking it out and seeing if there are any problems with it? diff php_imap.c php_imap_fixed.c 1251a1252 > char *body = mail_fetchtext_full (imap_le_struct->imap_stream, Z_LVAL_PP(msgno), NIL, myargc==3 ? Z_LVAL_PP(pflags) : NIL); 1253c1254,1255 < RETVAL_STRING(mail_fetchtext_full (imap_le_struct->imap_stream, Z_LVAL_PP(msgno), NIL, myargc==3 ? Z_LVAL_PP(pflags) : NIL), 1); --- > RETVAL_STRING(body, 1); > free(body); ------------------------------------------------------------------------ [2009-04-14 18:41:36] jake dot levitt at mailtrust dot com I tried closing and freeing the imap connection every 100 calls to imap_body() to see if it was the resource that was holding on to the memory. This did not help. Code: if ($i % 100 === 0) { echo "Releasing mailbox\n"; imap_close($mailbox); $mailbox = null; unset($mailbox); $mailbox = @imap_open($connect_string, $username, $password, 0, 3); $reopen_success = imap_reopen($mailbox, $connect_string, 0, 3); } ------------------------------------------------------------------------ [2009-04-14 15:43:56] jake dot levitt at mailtrust dot com I have now confirmed that this bug also exists in PHP version 5.3.0RC1 on CentOs 5.1. ------------------------------------------------------------------------ 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/47940 -- Edit this bug report at http://bugs.php.net/?id=47940&edit=1

« previous php.bugs (#136185) next »