summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Peter Banyard <girgias@php.net>2020-11-30 04:48:17 +0000
committerGeorge Peter Banyard <girgias@php.net>2020-11-30 14:08:31 +0000
commit0076b47326e53d98b5df56c5f970b2b5cc3d9b6d (patch)
treed92e622f6edf87233a0328acae7da9e86cfdabb9
parenta55402d07c12bb2eda4a41e4fc4a20d49ef17142 (diff)
downloadphp-git-0076b47326e53d98b5df56c5f970b2b5cc3d9b6d.tar.gz
Fix Bug #80438: imap_msgno() incorrectly warns and return false on valid UIDs in PHP 8.0.0
Checking for a valid Unique ID (UID) cannot use the convenience macro as they might be larger than the message number which has for maximum value the total number of current messages available in the mailbox.
-rw-r--r--NEWS3
-rw-r--r--ext/imap/php_imap.c12
-rw-r--r--ext/imap/tests/bug80438.phpt72
3 files changed, 83 insertions, 4 deletions
diff --git a/NEWS b/NEWS
index 7fc6ff6131..f7c3861100 100644
--- a/NEWS
+++ b/NEWS
@@ -13,6 +13,9 @@ PHP NEWS
- Fileinfo:
. Fixed bug #77961 (finfo_open crafted magic parsing SIGABRT). (cmb)
+- IMAP
+ . Fixed bug #80438 (imap_msgno() incorrectly warns and return false on valid UIDs in PHP 8.0.0). (girgias)
+
- Intl:
. Fixed bug #80425 (MessageFormatAdapter::getArgTypeList redefined). (Nikita)
diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c
index c561a5e72c..023795fd8c 100644
--- a/ext/imap/php_imap.c
+++ b/ext/imap/php_imap.c
@@ -2835,10 +2835,10 @@ PHP_FUNCTION(imap_uid)
PHP_FUNCTION(imap_msgno)
{
zval *streamind;
- zend_long msgno;
+ zend_long msg_uid;
pils *imap_le_struct;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "rl", &streamind, &msgno) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "rl", &streamind, &msg_uid) == FAILURE) {
RETURN_THROWS();
}
@@ -2846,9 +2846,13 @@ PHP_FUNCTION(imap_msgno)
RETURN_THROWS();
}
- PHP_IMAP_CHECK_MSGNO(msgno, 2);
+ /* Do NOT use the PHP_IMAP_CHECK_MSGNO() macro as UID cannot be checked for their upper bound. */
+ if (msg_uid < 1) {
+ zend_argument_value_error(2, "must be greater than 0");
+ RETURN_THROWS();
+ }
- RETURN_LONG(mail_msgno(imap_le_struct->imap_stream, msgno));
+ RETURN_LONG(mail_msgno(imap_le_struct->imap_stream, msg_uid));
}
/* }}} */
diff --git a/ext/imap/tests/bug80438.phpt b/ext/imap/tests/bug80438.phpt
new file mode 100644
index 0000000000..ea35f01a7b
--- /dev/null
+++ b/ext/imap/tests/bug80438.phpt
@@ -0,0 +1,72 @@
+--TEST--
+Bug #80438: imap_msgno() incorrectly warns and return false on valid UIDs in PHP 8.0.0
+--SKIPIF--
+<?php
+require_once(__DIR__.'/setup/skipif.inc');
+?>
+--FILE--
+<?php
+echo "*** Testing imap_fetch_overview() : basic functionality ***\n";
+
+require_once __DIR__.'/setup/imap_include.inc';
+
+// create a new mailbox and add 10 new messages to it
+$mail_box = setup_test_mailbox('bug80438', 10);
+
+// Delete messages to remove the numerical ordering
+imap_delete($mail_box, 5);
+imap_delete($mail_box, 6);
+imap_delete($mail_box, 7);
+imap_delete($mail_box, 8);
+imap_expunge($mail_box);
+
+$message_number_array = imap_search($mail_box, 'ALL', SE_UID);
+
+var_dump($message_number_array);
+
+foreach ($message_number_array as $message_unique_id)
+{
+ echo 'Unique ID: ';
+ var_dump($message_unique_id);
+ echo 'Ordered message number: ';
+ var_dump(imap_msgno($mail_box, $message_unique_id));
+}
+
+imap_close($mail_box);
+
+?>
+--CLEAN--
+<?php
+$mailbox_suffix = 'bug80438';
+require_once __DIR__.'/setup/clean.inc';
+?>
+--EXPECT--
+*** Testing imap_fetch_overview() : basic functionality ***
+Create a temporary mailbox and add 10 msgs
+New mailbox created
+array(6) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+ [3]=>
+ int(4)
+ [4]=>
+ int(9)
+ [5]=>
+ int(10)
+}
+Unique ID: int(1)
+Ordered message number: int(1)
+Unique ID: int(2)
+Ordered message number: int(2)
+Unique ID: int(3)
+Ordered message number: int(3)
+Unique ID: int(4)
+Ordered message number: int(4)
+Unique ID: int(9)
+Ordered message number: int(5)
+Unique ID: int(10)
+Ordered message number: int(6)