ID: 44594 Updated by: [EMAIL PROTECTED] Reported By: [EMAIL PROTECTED] -Status: Open +Status: Assigned Bug Type: IMAP related Operating System: Windows XP PHP Version: 5.2CVS-2008-04-01 (snap) -Assigned To: +Assigned To: iliaa
Previous Comments: ------------------------------------------------------------------------ [2008-04-01 15:54:57] [EMAIL PROTECTED] Description: ------------ When a negative integer is passed as the $n_retries argument to imap_open(), the number is passed as a signed long to the c-client function mail_parameters(), which is expecting an unsigned long to be passed on a SET_MAXLOGINTRIALS call. This results in $n_retries being set to a huge number. The problem is the the function php_imap_do_open() in ext/imap/php_imap.c. Below is a patch written by Andy Wharmby (CVS ID wharmby), it returns a warning if $n_retries is less than 0: The code as it stands is: #ifdef SET_MAXLOGINTRIALS if (myargc == 5) { convert_to_long_ex(retries); mail_parameters(NIL, SET_MAXLOGINTRIALS, (void *) Z_LVAL_PP(retries)); } #endif SOLUTION: #ifdef SET_MAXLOGINTRIALS if (myargc == 5) { convert_to_long_ex(retries); if (retries < 1) { php_error_docref(NULL TSRMLS_CC, E_WARNING ,"Retries cannot be less than 1"); RETURN_FALSE; } mail_parameters(NIL, SET_MAXLOGINTRIALS, (void *) Z_LVAL_PP(retries)); } #endif The documentation for the $n_retries argument also says that the number passed is "Number of maximum connect attempts" which is incorrect. There is always one attempt to connect, if that fails then $n_retries sets how many more attempts are made *after* the initial attempt. Reproduce code: --------------- <?php var_dump(imap_open($mailbox, $username, $password, null, -1)); ?> ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=44594&edit=1