[PHP-CVS] [php-src] master: Fix GH-23006: Correct phpcredits() full-page HTML title (#23007)

[email protected] (Weilin Du via GitHub) Wed, 5 Aug 2026 16:32:28 +0000
Newsgroups php.cvs
Message-ID <[email protected]>
Author: Weilin Du (LamentXU123)=0ACommitter: GitHub (web-flow)=0APusher: La=
mentXU123=0ADate: 2026-08-06T00:32:24+08:00=0A=0ACommit: https://github.com=
/php/php-src/commit/7a410c8baa48d5f91840c834701c10043c8fcbc9=0ARaw diff: ht=
tps://github.com/php/php-src/commit/7a410c8baa48d5f91840c834701c10043c8fcbc=
9.diff=0A=0AFix GH-23006: Correct phpcredits() full-page HTML title (#23007=
)=0A=0AChanged paths:=0A  A  ext/standard/tests/general_functions/phpcredit=
s_title.phpt=0A  M  NEWS=0A  M  UPGRADING.INTERNALS=0A  M  ext/standard/cre=
dits.c=0A  M  ext/standard/info.c=0A  M  ext/standard/info.h=0A=0A=0ADiff:=
=0A=0Adiff --git a/NEWS b/NEWS=0Aindex 7dd05a2b1c72..cdfca0fbf0f5 100644=0A=
--- a/NEWS=0A+++ b/NEWS=0A@@ -46,6 +46,8 @@ PHP                            =
                                            NEWS=0A   . Added the "filter.m=
ax_filter_count" stream context option for php://filter=0A     URLs. Using =
more than 16 filters without configuring this option is now=0A     deprecat=
ed. (Sjoerd Langkemper)=0A+  . Fixed bug GH-23006 (phpcredits() full-page H=
TML title says phpinfo()).=0A+    (Weilin Du)=0A   . The following function=
s now raise a ValueError when the $filename argument=0A     contains NUL by=
tes: fileperms(), fileinode(), filesize(), fileowner(),=0A     filegroup(),=
 fileatime(), filemtime(), filectime(), filetype(),=0Adiff --git a/UPGRADIN=
G.INTERNALS b/UPGRADING.INTERNALS=0Aindex dcc21206d89f..6554c752b8af 100644=
=0A--- a/UPGRADING.INTERNALS=0A+++ b/UPGRADING.INTERNALS=0A@@ -164,6 +164,7=
 @@ PHP 8.6 INTERNALS UPGRADE NOTES=0A   . EG(in_autoload) was renamed to E=
G(autoload_current_classnames) and no=0A     longer is a pointer, but a dir=
ectly embedded HashTable struct.=0A   . Extended php_stream_filter_ops with=
 seek method.=0A+  . php_print_info_htmlhead() now takes a title argument.=
=0A   . zend_argument_error_variadic() now takes a new 'function' parameter=
.=0A   . The param argument in the php_verror() function has been removed.=
=0A   . The php_stream_wrapper_log_error() signature changed from=0Adiff --=
git a/ext/standard/credits.c b/ext/standard/credits.c=0Aindex affed4adfee0.=
.0aeb0780f38f 100644=0A--- a/ext/standard/credits.c=0A+++ b/ext/standard/cr=
edits.c=0A@@ -22,7 +22,7 @@=0A PHPAPI ZEND_COLD void php_print_credits(int =
flag) /* {{{ */=0A {=0A =09if (!sapi_module.phpinfo_as_text && flag & PHP_C=
REDITS_FULLPAGE) {=0A-=09=09php_print_info_htmlhead();=0A+=09=09php_print_i=
nfo_htmlhead("phpcredits()");=0A =09}=0A =0A =09if (!sapi_module.phpinfo_as=
_text) {=0Adiff --git a/ext/standard/info.c b/ext/standard/info.c=0Aindex d=
cb01bc08220..2029679998db 100644=0A--- a/ext/standard/info.c=0A+++ b/ext/st=
andard/info.c=0A@@ -733,13 +733,13 @@ PHPAPI zend_string *php_get_uname(cha=
r mode)=0A /* }}} */=0A =0A /* {{{ php_print_info_htmlhead */=0A-PHPAPI ZEN=
D_COLD void php_print_info_htmlhead(void)=0A+PHPAPI ZEND_COLD void php_prin=
t_info_htmlhead(const char *title)=0A {=0A =09php_info_print("<!DOCTYPE htm=
l PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"DTD/xhtml1-transition=
al.dtd\">\n");=0A =09php_info_print("<html xmlns=3D\"http://www.w3.org/1999=
/xhtml\">");=0A =09php_info_print("<head>\n");=0A =09php_info_print_style()=
;=0A-=09php_info_printf("<title>PHP %s - phpinfo()</title>", PHP_VERSION);=
=0A+=09php_info_printf("<title>PHP %s - %s</title>", PHP_VERSION, title);=
=0A =09php_info_print("<meta name=3D\"ROBOTS\" content=3D\"NOINDEX,NOFOLLOW=
,NOARCHIVE\" />");=0A =09php_info_print("</head>\n");=0A =09php_info_print(=
"<body><div class=3D\"center\">\n");=0A@@ -761,7 +761,7 @@ PHPAPI ZEND_COLD=
 void php_print_info(int flag)=0A =09zend_string *php_uname;=0A =0A =09if (=
!sapi_module.phpinfo_as_text) {=0A-=09=09php_print_info_htmlhead();=0A+=09=
=09php_print_info_htmlhead("phpinfo()");=0A =09} else {=0A =09=09php_info_p=
rint("phpinfo()\n");=0A =09}=0Adiff --git a/ext/standard/info.h b/ext/stand=
ard/info.h=0Aindex 6d1603dd8346..38a9341e81a1 100644=0A--- a/ext/standard/i=
nfo.h=0A+++ b/ext/standard/info.h=0A@@ -50,7 +50,7 @@=0A #define ZEND_LOGO_=
DATA_URI "data:image/png;base64,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
Jpb61CXimOrq8RqiEeu6TU3iMwdzYgWhUnWHDDKr0ptLar6USqmOfYYiGMMTUN/KgziGVTo+pNJ=
HBBfF0zVAQc6N2DUL+tcO2Yc1Rk2ss+yBmOko43yCSCljJXAWA7PD4eAt6MBy2yiNACRvVVN05t=
40pPLYPsT+zlRDpOLG/Jt8OSGKhmnBpivV7q/Y6JkucVgkyWKb52rVZwl0tvNDi+AzRvKjfK1Dn=
jvpd1FhPEc1LBVsbqENXN35cFaPY2BIVGdlWYZKqgPPj/RythNtpcNycpoOxwAae0bGwhAkAQg0=
1cfiDWDRqZtHhCqFQ5FAtOXKXh/Yh6Ci2N5YMUDW2SHg/N3scn02N++cnMIZCBdwS9gtApRxqDc=
6OlzWtSrdc8cJGlzP5fzZDri1tQNixISWL/5fSQvcVzfe/wzXfSG8Kuw03pHB/t5KMik+EYJ1EC=
1d0zCw6fofqRI2ZJwpvyxN4uPs0q/6UR2szyESobxatf3aa7jvfrT0DGPNpYV3H3CI0BYLGllQd=
y7TX14rUP/zzDHpuRp0EPLnJvH68Qij/RXnyIyku5Ea+5S3NO7s01q77eMY1qqY8T7Qs+4qtq+o=
2UWhjZO6HuWhjJBlZXWbAHvbFSTAxqMW+RbuG3VfviAP36tshujINh6Tr3kE0BNMl5x8Qq6+mVT=
dwrMlzpRrGaGPzVpw9NDNFngjoFZZzRCS/FRPXHRZT31X2MgfYTQYX1WE1moaaQJfKEFTs/camk=
XnUwt9YtNWPiuc67VmRlb0yiRgS/cAe7is0QXuTAm9kikM2DNc5OkeGRaMU8tq0TJHbUCOtezMe=
RfITiSv1PLLbGE5gb/NOB/1AuR1KlLETDltidyR4XIPasyEnc6eIbRa9kfNifFeXJOAnVJBiKfF=
CvobcLKccLHWojHJpIPH3iXQlpoNLrdcH44sucvmQOHHjZ9rDrGdbixVmbk/XGy4mtiKuoQDjmQ=
pFJLs6wuSZvqKmL0ky6zOZLry+420UKUaue5ooyeqy9+iopgM989cp1Dcp16bSU1tOJbyFyjedT=
ID5wOk6OAUFFXUDKFRLkmBM3xH7fzIJwPLsxexDMWP2b8g38DqN45ywCuH0VNuv+XmjwOYCjtUa=
kbg6AkGlNoQGBMB5A9g8hh2g7zFE2U4F35FxfHfmwwbxcz3Yl32C/oAwPwDAS6UXdpOhXPZ27Tr=
c9R/SLTla0zzGoXl2QAexnLVZJB/CZMpV7HthfL4lJIrb54u+tdv3/rCiSbw+k88yM9ZxXgKwlH=
mZycq13iSr0KeMHmUZw6r1VICrLT4D5fy4wq/5DAvfjaWC9oAd9KxwTNUJynUjL+EqpwSTME1zO=
WMBuIxmZ7p9RCsNq+NmdxW09I1MdNkJeYZNHsIt0qKEO2Z4kvmHadS+Xqv2cqzc93rpuhdl54tg=
2DISuJljBW3uZjMHrAPqHOYK6zPIM23G2+14Rts4cyLbdxo3Y667UskOo/W/m/PwRhQBwZFkT2v=
XzDbTtLMZCyfP1155bbfDrpjKZoYH41bO+d97jmEgMPVxFMF0iHESIkiNtDhKuwV058cw0dBZNP=
+lFsSU/6VWf0E4P/x+IF2eJnokr4uW/2jAKPYjjRb7Cxef70c3qsCl0im1Gj/Uu2eF6sWo0rUiT=
Qq7zS+pYjywnXYwcyOZfI4mKgHj9N2ttHqbRfSlQXhjw5XXy4S7ZbzOovkxVRsphHp8ia3Hlyle=
ZS1zHcvoVrdjuNFdEe7edGHzSbpSria/WZ3+cxYV5DCx/4w7FUfyfTW0WO+i7x2YrzKUXZFw/su=
t+OxJDGkHUxEZPwgCquQcIgxZR9oXekDQk8FF60bqwocupaIoEz6EmaC3C+0Ro6Wgp4eb2tpPJq=
N+4xXFXQ3TfUfCc5PDNnLZDpLIV1NADKyjZa87mHgmWX57bYdIfIY3pdCGf43xQUXI62kBn3fZx=
i4SPC8crIjDQ4yzFAaz/XcPJn7xf03VRzIB5Z7qCbBzPQi5jga2E9bCD+ELug8ficEZCk/Cmj8R=
o3aLtLxDR1/QffhIHNRTUZCf+S5G7SJBp2b7G31B9+EjcVAFEInZQ2LU7jiN1zf4gu7DR+KwTvk=
fO9bGx6BNnEQ8XXmN5cT3fEH34SNxwN4A9dgknIEwyWNbeRTwV7WYHBVwFQfbwKb7vOUjiYAiKV=
T1PczXqCLD/n5UbuLcNxTKoCgExSFNmsFCHI6iJBQFnUbqqbWPHyFceDAOrC/oPpIN+FVaVLrNU=
a6dLPbvoEQdO4pd1OUylBVkCutsOkqosbNvwcE6qL6g+0hG3MY4ejots1pT3kE4P9QDdfuLKeDf=
HswD6gu6j2TF2yQcLoqEGurre9EdP1QTfmxJRdn0NlrvD+jmY69Egz+UQvxfgAEALJ4EcRDa/to=
AAAAASUVORK5CYII=3D"=0A =0A BEGIN_EXTERN_C()=0A-PHPAPI void php_print_info_=
htmlhead(void);=0A+PHPAPI void php_print_info_htmlhead(const char *title);=
=0A PHPAPI void php_print_info(int flag);=0A PHPAPI void php_print_style(vo=
id);=0A PHPAPI void php_info_print_style(void);=0Adiff --git a/ext/standard=
/tests/general_functions/phpcredits_title.phpt b/ext/standard/tests/general=
_functions/phpcredits_title.phpt=0Anew file mode 100644=0Aindex 00000000000=
0..6d306e609602=0A--- /dev/null=0A+++ b/ext/standard/tests/general_function=
s/phpcredits_title.phpt=0A@@ -0,0 +1,18 @@=0A+--TEST--=0A+phpcredits() full=
-page HTML title=0A+--POST--=0A+dummy=3Dx=0A+--FILE--=0A+<?php=0A+ob_start(=
);=0A+$result =3D phpcredits();=0A+$output =3D ob_get_clean();=0A+=0A+var_d=
ump($result);=0A+var_dump(str_contains($output, '<title>PHP ' . PHP_VERSION=
 . ' - phpcredits()</title>'));=0A+var_dump(str_contains($output, '<title>P=
HP ' . PHP_VERSION . ' - phpinfo()</title>'));=0A+?>=0A+--EXPECT--=0A+bool(=
true)=0A+bool(true)=0A+bool(false)=0A