Skip to content

Commit e42bf72

Browse files
committed
Merge branch 'PHP-8.0'
* PHP-8.0: Fix Bug #80438: imap_msgno() incorrectly warns and return false on valid UIDs in PHP 8.0.0 Rename XmlParser to XMLParser for consistency with XMLWriter/XMLReader
2 parents 39c59e0 + 0076b47 commit e42bf72

File tree

8 files changed

+121
-45
lines changed

8 files changed

+121
-45
lines changed

ext/imap/php_imap.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2835,20 +2835,24 @@ PHP_FUNCTION(imap_uid)
28352835
PHP_FUNCTION(imap_msgno)
28362836
{
28372837
zval *streamind;
2838-
zend_long msgno;
2838+
zend_long msg_uid;
28392839
pils *imap_le_struct;
28402840

2841-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rl", &streamind, &msgno) == FAILURE) {
2841+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "rl", &streamind, &msg_uid) == FAILURE) {
28422842
RETURN_THROWS();
28432843
}
28442844

28452845
if ((imap_le_struct = (pils *)zend_fetch_resource(Z_RES_P(streamind), "imap", le_imap)) == NULL) {
28462846
RETURN_THROWS();
28472847
}
28482848

2849-
PHP_IMAP_CHECK_MSGNO(msgno, 2);
2849+
/* Do NOT use the PHP_IMAP_CHECK_MSGNO() macro as UID cannot be checked for their upper bound. */
2850+
if (msg_uid < 1) {
2851+
zend_argument_value_error(2, "must be greater than 0");
2852+
RETURN_THROWS();
2853+
}
28502854

2851-
RETURN_LONG(mail_msgno(imap_le_struct->imap_stream, msgno));
2855+
RETURN_LONG(mail_msgno(imap_le_struct->imap_stream, msg_uid));
28522856
}
28532857
/* }}} */
28542858

ext/imap/tests/bug80438.phpt

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
--TEST--
2+
Bug #80438: imap_msgno() incorrectly warns and return false on valid UIDs in PHP 8.0.0
3+
--SKIPIF--
4+
<?php
5+
require_once(__DIR__.'/setup/skipif.inc');
6+
?>
7+
--FILE--
8+
<?php
9+
echo "*** Testing imap_fetch_overview() : basic functionality ***\n";
10+
11+
require_once __DIR__.'/setup/imap_include.inc';
12+
13+
// create a new mailbox and add 10 new messages to it
14+
$mail_box = setup_test_mailbox('bug80438', 10);
15+
16+
// Delete messages to remove the numerical ordering
17+
imap_delete($mail_box, 5);
18+
imap_delete($mail_box, 6);
19+
imap_delete($mail_box, 7);
20+
imap_delete($mail_box, 8);
21+
imap_expunge($mail_box);
22+
23+
$message_number_array = imap_search($mail_box, 'ALL', SE_UID);
24+
25+
var_dump($message_number_array);
26+
27+
foreach ($message_number_array as $message_unique_id)
28+
{
29+
echo 'Unique ID: ';
30+
var_dump($message_unique_id);
31+
echo 'Ordered message number: ';
32+
var_dump(imap_msgno($mail_box, $message_unique_id));
33+
}
34+
35+
imap_close($mail_box);
36+
37+
?>
38+
--CLEAN--
39+
<?php
40+
$mailbox_suffix = 'bug80438';
41+
require_once __DIR__.'/setup/clean.inc';
42+
?>
43+
--EXPECT--
44+
*** Testing imap_fetch_overview() : basic functionality ***
45+
Create a temporary mailbox and add 10 msgs
46+
New mailbox created
47+
array(6) {
48+
[0]=>
49+
int(1)
50+
[1]=>
51+
int(2)
52+
[2]=>
53+
int(3)
54+
[3]=>
55+
int(4)
56+
[4]=>
57+
int(9)
58+
[5]=>
59+
int(10)
60+
}
61+
Unique ID: int(1)
62+
Ordered message number: int(1)
63+
Unique ID: int(2)
64+
Ordered message number: int(2)
65+
Unique ID: int(3)
66+
Ordered message number: int(3)
67+
Unique ID: int(4)
68+
Ordered message number: int(4)
69+
Unique ID: int(9)
70+
Ordered message number: int(5)
71+
Unique ID: int(10)
72+
Ordered message number: int(6)

ext/xml/tests/bug78563.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ clone $parser;
1111
?>
1212
===DONE===
1313
--EXPECTF--
14-
Fatal error: Uncaught Error: Trying to clone an uncloneable object of class XmlParser in %s:%d
14+
Fatal error: Uncaught Error: Trying to clone an uncloneable object of class XMLParser in %s:%d
1515
Stack trace:
1616
#0 {main}
1717
thrown in %s on line %d

ext/xml/tests/bug78563_final.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@ class Dummy extends Xmlparser {
1212
?>
1313
===DONE===
1414
--EXPECTF--
15-
Fatal error: Class Dummy may not inherit from final class (XmlParser) in %s on line %d
15+
Fatal error: Class Dummy may not inherit from final class (XMLParser) in %s on line %d

ext/xml/tests/bug78563_serialize.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ serialize($parser);
1111
?>
1212
===DONE===
1313
--EXPECTF--
14-
Fatal error: Uncaught Exception: Serialization of 'XmlParser' is not allowed in %s:%d
14+
Fatal error: Uncaught Exception: Serialization of 'XMLParser' is not allowed in %s:%d
1515
Stack trace:
16-
#0 %s(%d): serialize(Object(XmlParser))
16+
#0 %s(%d): serialize(Object(XMLParser))
1717
#1 {main}
1818
thrown in %s on line %d

ext/xml/xml.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ static void php_xml_free_wrapper(void *ptr)
254254
PHP_MINIT_FUNCTION(xml)
255255
{
256256
zend_class_entry ce;
257-
INIT_CLASS_ENTRY(ce, "XmlParser", class_XmlParser_methods);
257+
INIT_CLASS_ENTRY(ce, "XMLParser", class_XMLParser_methods);
258258
xml_parser_ce = zend_register_internal_class(&ce);
259259
xml_parser_ce->create_object = xml_parser_create_object;
260260
xml_parser_ce->ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES;
@@ -423,7 +423,7 @@ static HashTable *xml_parser_get_gc(zend_object *object, zval **table, int *n)
423423
}
424424

425425
static zend_function *xml_parser_get_constructor(zend_object *object) {
426-
zend_throw_error(NULL, "Cannot directly construct XmlParser, use xml_parser_create() or xml_parser_create_ns() instead");
426+
zend_throw_error(NULL, "Cannot directly construct XMLParser, use xml_parser_create() or xml_parser_create_ns() instead");
427427
return NULL;
428428
}
429429

ext/xml/xml.stub.php

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,67 +2,67 @@
22

33
/** @generate-function-entries */
44

5-
function xml_parser_create(?string $encoding = null): XmlParser {}
5+
function xml_parser_create(?string $encoding = null): XMLParser {}
66

7-
function xml_parser_create_ns(?string $encoding = null, string $separator = ":"): XmlParser {}
7+
function xml_parser_create_ns(?string $encoding = null, string $separator = ":"): XMLParser {}
88

9-
function xml_set_object(XmlParser $parser, object $object): bool {}
9+
function xml_set_object(XMLParser $parser, object $object): bool {}
1010

1111
/**
1212
* @param callable $start_handler
1313
* @param callable $end_handler
1414
*/
15-
function xml_set_element_handler(XmlParser $parser, $start_handler, $end_handler): bool {}
15+
function xml_set_element_handler(XMLParser $parser, $start_handler, $end_handler): bool {}
1616

1717
/** @param callable $handler */
18-
function xml_set_character_data_handler(XmlParser $parser, $handler): bool {}
18+
function xml_set_character_data_handler(XMLParser $parser, $handler): bool {}
1919

2020
/** @param callable $handler */
21-
function xml_set_processing_instruction_handler(XmlParser $parser, $handler): bool {}
21+
function xml_set_processing_instruction_handler(XMLParser $parser, $handler): bool {}
2222

2323
/** @param callable $handler */
24-
function xml_set_default_handler(XmlParser $parser, $handler): bool {}
24+
function xml_set_default_handler(XMLParser $parser, $handler): bool {}
2525

2626
/** @param callable $handler */
27-
function xml_set_unparsed_entity_decl_handler(XmlParser $parser, $handler): bool {}
27+
function xml_set_unparsed_entity_decl_handler(XMLParser $parser, $handler): bool {}
2828

2929
/** @param callable $handler */
30-
function xml_set_notation_decl_handler(XmlParser $parser, $handler): bool {}
30+
function xml_set_notation_decl_handler(XMLParser $parser, $handler): bool {}
3131

3232
/** @param callable $handler */
33-
function xml_set_external_entity_ref_handler(XmlParser $parser, $handler): bool {}
33+
function xml_set_external_entity_ref_handler(XMLParser $parser, $handler): bool {}
3434

3535
/** @param callable $handler */
36-
function xml_set_start_namespace_decl_handler(XmlParser $parser, $handler): bool {}
36+
function xml_set_start_namespace_decl_handler(XMLParser $parser, $handler): bool {}
3737

3838
/** @param callable $handler */
39-
function xml_set_end_namespace_decl_handler(XmlParser $parser, $handler): bool {}
39+
function xml_set_end_namespace_decl_handler(XMLParser $parser, $handler): bool {}
4040

41-
function xml_parse(XmlParser $parser, string $data, bool $is_final = false): int {}
41+
function xml_parse(XMLParser $parser, string $data, bool $is_final = false): int {}
4242

4343
/**
4444
* @param array $values
4545
* @param array $index
4646
*/
47-
function xml_parse_into_struct(XmlParser $parser, string $data, &$values, &$index = null): int {}
47+
function xml_parse_into_struct(XMLParser $parser, string $data, &$values, &$index = null): int {}
4848

49-
function xml_get_error_code(XmlParser $parser): int {}
49+
function xml_get_error_code(XMLParser $parser): int {}
5050

5151
function xml_error_string(int $error_code): ?string {}
5252

53-
function xml_get_current_line_number(XmlParser $parser): int {}
53+
function xml_get_current_line_number(XMLParser $parser): int {}
5454

55-
function xml_get_current_column_number(XmlParser $parser): int {}
55+
function xml_get_current_column_number(XMLParser $parser): int {}
5656

57-
function xml_get_current_byte_index(XmlParser $parser): int {}
57+
function xml_get_current_byte_index(XMLParser $parser): int {}
5858

59-
function xml_parser_free(XmlParser $parser): bool {}
59+
function xml_parser_free(XMLParser $parser): bool {}
6060

6161
/** @param string|int $value */
62-
function xml_parser_set_option(XmlParser $parser, int $option, $value): bool {}
62+
function xml_parser_set_option(XMLParser $parser, int $option, $value): bool {}
6363

64-
function xml_parser_get_option(XmlParser $parser, int $option): string|int {}
64+
function xml_parser_get_option(XMLParser $parser, int $option): string|int {}
6565

66-
final class XmlParser
66+
final class XMLParser
6767
{
6868
}

ext/xml/xml_arginfo.h

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: 7014b171486b2a597f659369a707a592c26b3b2f */
2+
* Stub hash: d42215062c41775bae538cd310bc60e63fa06a8e */
33

4-
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_xml_parser_create, 0, 0, XmlParser, 0)
4+
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_xml_parser_create, 0, 0, XMLParser, 0)
55
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null")
66
ZEND_END_ARG_INFO()
77

8-
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_xml_parser_create_ns, 0, 0, XmlParser, 0)
8+
ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_xml_parser_create_ns, 0, 0, XMLParser, 0)
99
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, encoding, IS_STRING, 1, "null")
1010
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, separator, IS_STRING, 0, "\":\"")
1111
ZEND_END_ARG_INFO()
1212

1313
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_set_object, 0, 2, _IS_BOOL, 0)
14-
ZEND_ARG_OBJ_INFO(0, parser, XmlParser, 0)
14+
ZEND_ARG_OBJ_INFO(0, parser, XMLParser, 0)
1515
ZEND_ARG_TYPE_INFO(0, object, IS_OBJECT, 0)
1616
ZEND_END_ARG_INFO()
1717

1818
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_set_element_handler, 0, 3, _IS_BOOL, 0)
19-
ZEND_ARG_OBJ_INFO(0, parser, XmlParser, 0)
19+
ZEND_ARG_OBJ_INFO(0, parser, XMLParser, 0)
2020
ZEND_ARG_INFO(0, start_handler)
2121
ZEND_ARG_INFO(0, end_handler)
2222
ZEND_END_ARG_INFO()
2323

2424
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_set_character_data_handler, 0, 2, _IS_BOOL, 0)
25-
ZEND_ARG_OBJ_INFO(0, parser, XmlParser, 0)
25+
ZEND_ARG_OBJ_INFO(0, parser, XMLParser, 0)
2626
ZEND_ARG_INFO(0, handler)
2727
ZEND_END_ARG_INFO()
2828

@@ -41,20 +41,20 @@ ZEND_END_ARG_INFO()
4141
#define arginfo_xml_set_end_namespace_decl_handler arginfo_xml_set_character_data_handler
4242

4343
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_parse, 0, 2, IS_LONG, 0)
44-
ZEND_ARG_OBJ_INFO(0, parser, XmlParser, 0)
44+
ZEND_ARG_OBJ_INFO(0, parser, XMLParser, 0)
4545
ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0)
4646
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, is_final, _IS_BOOL, 0, "false")
4747
ZEND_END_ARG_INFO()
4848

4949
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_parse_into_struct, 0, 3, IS_LONG, 0)
50-
ZEND_ARG_OBJ_INFO(0, parser, XmlParser, 0)
50+
ZEND_ARG_OBJ_INFO(0, parser, XMLParser, 0)
5151
ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0)
5252
ZEND_ARG_INFO(1, values)
5353
ZEND_ARG_INFO_WITH_DEFAULT_VALUE(1, index, "null")
5454
ZEND_END_ARG_INFO()
5555

5656
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_get_error_code, 0, 1, IS_LONG, 0)
57-
ZEND_ARG_OBJ_INFO(0, parser, XmlParser, 0)
57+
ZEND_ARG_OBJ_INFO(0, parser, XMLParser, 0)
5858
ZEND_END_ARG_INFO()
5959

6060
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_error_string, 0, 1, IS_STRING, 1)
@@ -68,17 +68,17 @@ ZEND_END_ARG_INFO()
6868
#define arginfo_xml_get_current_byte_index arginfo_xml_get_error_code
6969

7070
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_parser_free, 0, 1, _IS_BOOL, 0)
71-
ZEND_ARG_OBJ_INFO(0, parser, XmlParser, 0)
71+
ZEND_ARG_OBJ_INFO(0, parser, XMLParser, 0)
7272
ZEND_END_ARG_INFO()
7373

7474
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_xml_parser_set_option, 0, 3, _IS_BOOL, 0)
75-
ZEND_ARG_OBJ_INFO(0, parser, XmlParser, 0)
75+
ZEND_ARG_OBJ_INFO(0, parser, XMLParser, 0)
7676
ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0)
7777
ZEND_ARG_INFO(0, value)
7878
ZEND_END_ARG_INFO()
7979

8080
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_xml_parser_get_option, 0, 2, MAY_BE_STRING|MAY_BE_LONG)
81-
ZEND_ARG_OBJ_INFO(0, parser, XmlParser, 0)
81+
ZEND_ARG_OBJ_INFO(0, parser, XMLParser, 0)
8282
ZEND_ARG_TYPE_INFO(0, option, IS_LONG, 0)
8383
ZEND_END_ARG_INFO()
8484

@@ -134,6 +134,6 @@ static const zend_function_entry ext_functions[] = {
134134
};
135135

136136

137-
static const zend_function_entry class_XmlParser_methods[] = {
137+
static const zend_function_entry class_XMLParser_methods[] = {
138138
ZEND_FE_END
139139
};

0 commit comments

Comments
 (0)