mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
fix #71287 (substr_replace bug when length type is string)
This commit is contained in:
parent
d9e4510224
commit
034e8ec02e
@ -2469,6 +2469,7 @@ PHP_FUNCTION(substr_replace)
|
||||
|
||||
if (argc > 3) {
|
||||
if (Z_TYPE_P(len) != IS_ARRAY) {
|
||||
convert_to_long_ex(len);
|
||||
l = zval_get_long(len);
|
||||
}
|
||||
} else {
|
||||
@ -2482,12 +2483,12 @@ PHP_FUNCTION(substr_replace)
|
||||
(argc == 3 && Z_TYPE_P(from) == IS_ARRAY) ||
|
||||
(argc == 4 && Z_TYPE_P(from) != Z_TYPE_P(len))
|
||||
) {
|
||||
php_error_docref(NULL, E_WARNING, "'from' and 'len' should be of same type - numerical or array ");
|
||||
php_error_docref(NULL, E_WARNING, "'start' and 'length' should be of same type - numerical or array ");
|
||||
RETURN_STR_COPY(Z_STR_P(str));
|
||||
}
|
||||
if (argc == 4 && Z_TYPE_P(from) == IS_ARRAY) {
|
||||
if (zend_hash_num_elements(Z_ARRVAL_P(from)) != zend_hash_num_elements(Z_ARRVAL_P(len))) {
|
||||
php_error_docref(NULL, E_WARNING, "'from' and 'len' should have the same number of elements");
|
||||
php_error_docref(NULL, E_WARNING, "'start' and 'length' should have the same number of elements");
|
||||
RETURN_STR_COPY(Z_STR_P(str));
|
||||
}
|
||||
}
|
||||
@ -2559,7 +2560,7 @@ PHP_FUNCTION(substr_replace)
|
||||
}
|
||||
RETURN_NEW_STR(result);
|
||||
} else {
|
||||
php_error_docref(NULL, E_WARNING, "Functionality of 'from' and 'len' as arrays is not implemented");
|
||||
php_error_docref(NULL, E_WARNING, "Functionality of 'start' and 'length' as arrays is not implemented");
|
||||
RETURN_STR_COPY(Z_STR_P(str));
|
||||
}
|
||||
} else { /* str is array of strings */
|
||||
|
10
ext/standard/tests/bug71827.phpt
Normal file
10
ext/standard/tests/bug71827.phpt
Normal file
@ -0,0 +1,10 @@
|
||||
--TEST--
|
||||
Bug #71827 (substr_replace bug when length type is string )
|
||||
--FILE--
|
||||
<?php
|
||||
$line = str_repeat(' ',20); $value ='03'; $pos=0; $len='2';
|
||||
$line = substr_replace($line,$value,$pos,$len);
|
||||
echo "[$line]\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
[03 ]
|
@ -52,19 +52,19 @@ NULL
|
||||
|
||||
-- Testing substr_replace() function with start and length different types --
|
||||
|
||||
Warning: substr_replace(): 'from' and 'len' should be of same type - numerical or array in %s on line %d
|
||||
Warning: substr_replace(): 'start' and 'length' should be of same type - numerical or array in %s on line %d
|
||||
string(12) "Good morning"
|
||||
|
||||
Warning: substr_replace(): 'from' and 'len' should be of same type - numerical or array in %s on line %d
|
||||
Warning: substr_replace(): 'start' and 'length' should be of same type - numerical or array in %s on line %d
|
||||
string(12) "Good morning"
|
||||
|
||||
-- Testing substr_replace() function with start and length with a different number of elements --
|
||||
|
||||
Warning: substr_replace(): 'from' and 'len' should have the same number of elements in %s on line %d
|
||||
Warning: substr_replace(): 'start' and 'length' should have the same number of elements in %s on line %d
|
||||
string(12) "Good morning"
|
||||
|
||||
-- Testing substr_replace() function with start and length as arrays but string not--
|
||||
|
||||
Warning: substr_replace(): Functionality of 'from' and 'len' as arrays is not implemented in %s on line %d
|
||||
Warning: substr_replace(): Functionality of 'start' and 'length' as arrays is not implemented in %s on line %d
|
||||
string(12) "Good morning"
|
||||
===DONE===
|
||||
===DONE===
|
||||
|
Loading…
Reference in New Issue
Block a user