]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-8.0'
authorGeorge Peter Banyard <girgias@php.net>
Sat, 27 Feb 2021 13:14:23 +0000 (13:14 +0000)
committerGeorge Peter Banyard <girgias@php.net>
Sat, 27 Feb 2021 13:14:23 +0000 (13:14 +0000)
* PHP-8.0:
  Fix Bug #80800 imap_open() fails when the flags parameter includes CL_EXPUNGE

1  2 
ext/imap/php_imap.c

index e62d6f7b2aea7e06c4506770bde22ed357677593,9ff1ae061882dd49fa63dd1e20588e533ed82ab1..9a1ded643b2acd2e69a3e1f9e8286d886466c550
@@@ -898,10 -857,16 +902,14 @@@ PHP_FUNCTION(imap_reopen
                RETURN_THROWS();
        }
  
 -      if ((imap_le_struct = (pils *)zend_fetch_resource(Z_RES_P(streamind), "imap", le_imap)) == NULL) {
 -              RETURN_THROWS();
 -      }
 +      GET_IMAP_STREAM(imap_conn_struct, imap_conn_obj);
  
        /* 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();