diff options
author | George Peter Banyard <girgias@php.net> | 2021-02-26 03:03:38 +0000 |
---|---|---|
committer | George Peter Banyard <girgias@php.net> | 2021-02-27 13:12:22 +0000 |
commit | 1ee6aad248117312fdc9ff7edc3ddd7bd5203d79 (patch) | |
tree | 8d32f108c3f30586582ba5e13432ea1363b96da7 /ext/imap/php_imap.c | |
parent | 8813f2e0c31a98828cac4570673ccd8ce79b00af (diff) | |
download | php-git-1ee6aad248117312fdc9ff7edc3ddd7bd5203d79.tar.gz |
Fix Bug #80800 imap_open() fails when the flags parameter includes CL_EXPUNGE
This also affected imap_reopen().
Add a supplementary test that the CL_EXPUNGE flag does have
the intended effect.
Closes GH-6732
Diffstat (limited to 'ext/imap/php_imap.c')
-rw-r--r-- | ext/imap/php_imap.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c index bf04897c92..9ff1ae0618 100644 --- a/ext/imap/php_imap.c +++ b/ext/imap/php_imap.c @@ -735,7 +735,11 @@ PHP_FUNCTION(imap_open) RETURN_THROWS(); } - if (flags && ((flags & ~(OP_READONLY | OP_ANONYMOUS | OP_HALFOPEN | CL_EXPUNGE | OP_DEBUG | OP_SHORTCACHE + /* Check for PHP_EXPUNGE and not CL_EXPUNGE as the user land facing CL_EXPUNGE constant is defined + * to something different to prevent clashes between CL_EXPUNGE and an OP_* constant allowing setting + * the CL_EXPUNGE flag which will expunge when the mailbox is closed (be that manually, or via the + * IMAPConnection object being destroyed naturally at the end of the PHP script */ + if (flags && ((flags & ~(OP_READONLY | OP_ANONYMOUS | OP_HALFOPEN | PHP_EXPUNGE | OP_DEBUG | OP_SHORTCACHE | OP_SILENT | OP_PROTOTYPE | OP_SECURE)) != 0)) { zend_argument_value_error(4, "must be a bitmask of the OP_* constants, and CL_EXPUNGE"); RETURN_THROWS(); @@ -858,7 +862,11 @@ PHP_FUNCTION(imap_reopen) } /* TODO Verify these are the only options available as they are pulled from the php.net documentation */ - if (options && ((options & ~(OP_READONLY | OP_ANONYMOUS | OP_HALFOPEN | OP_EXPUNGE | CL_EXPUNGE)) != 0)) { + /* Check for PHP_EXPUNGE and not CL_EXPUNGE as the user land facing CL_EXPUNGE constant is defined + * to something different to prevent clashes between CL_EXPUNGE and an OP_* constant allowing setting + * the CL_EXPUNGE flag which will expunge when the mailbox is closed (be that manually, or via the + * IMAPConnection object being destroyed naturally at the end of the PHP script */ + if (options && ((options & ~(OP_READONLY | OP_ANONYMOUS | OP_HALFOPEN | OP_EXPUNGE | PHP_EXPUNGE)) != 0)) { zend_argument_value_error(3, "must be a bitmask of OP_READONLY, OP_ANONYMOUS, OP_HALFOPEN, " "OP_EXPUNGE, and CL_EXPUNGE"); RETURN_THROWS(); |