mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Fix #78236: convert error on receiving variables when duplicate [
When an input variable name contains a non matched open bracket, we not only have to replace that with an underscore, but also all following forbidden characters.
This commit is contained in:
4
NEWS
4
NEWS
@@ -2,6 +2,10 @@ PHP NEWS
|
||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
?? ??? ????, PHP 8.0.0beta1
|
||||
|
||||
- Core:
|
||||
. Fixed bug #78236 (convert error on receiving variables when duplicate [).
|
||||
(cmb)
|
||||
|
||||
- JIT:
|
||||
. Fixed bug #79864 (JIT segfault in Symfony OptionsResolver). (Dmitry)
|
||||
|
||||
|
||||
@@ -178,8 +178,14 @@ PHPAPI void php_register_variable_ex(const char *var_name, zval *val, zval *trac
|
||||
} else {
|
||||
ip = strchr(ip, ']');
|
||||
if (!ip) {
|
||||
/* PHP variables cannot contain '[' in their names, so we replace the character with a '_' */
|
||||
/* not an index; un-terminate the var name */
|
||||
*(index_s - 1) = '_';
|
||||
/* PHP variables cannot contain ' ', '.', '[' in their names, so we replace the characters with a '_' */
|
||||
for (p = index_s; *p; p++) {
|
||||
if (*p == ' ' || *p == '.' || *p == '[') {
|
||||
*p = '_';
|
||||
}
|
||||
}
|
||||
|
||||
index_len = 0;
|
||||
if (index) {
|
||||
|
||||
17
tests/basic/bug78236.phpt
Normal file
17
tests/basic/bug78236.phpt
Normal file
@@ -0,0 +1,17 @@
|
||||
--TEST--
|
||||
Bug #78236 (convert error on receiving variables when duplicate [)
|
||||
--POST--
|
||||
id[name=1&id[[name=a&id[na me.=3
|
||||
--FILE--
|
||||
<?php
|
||||
var_dump($_POST);
|
||||
?>
|
||||
--EXPECT--
|
||||
array(3) {
|
||||
["id_name"]=>
|
||||
string(1) "1"
|
||||
["id__name"]=>
|
||||
string(1) "a"
|
||||
["id_na_me_"]=>
|
||||
string(1) "3"
|
||||
}
|
||||
Reference in New Issue
Block a user