diff --git a/ext/standard/string.c b/ext/standard/string.c index 7b6ad8ed9ce..24c3862bf55 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -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 */ diff --git a/ext/standard/tests/bug71827.phpt b/ext/standard/tests/bug71827.phpt new file mode 100644 index 00000000000..eedb9fb549d --- /dev/null +++ b/ext/standard/tests/bug71827.phpt @@ -0,0 +1,10 @@ +--TEST-- +Bug #71827 (substr_replace bug when length type is string ) +--FILE-- + +--EXPECT-- +[03 ] diff --git a/ext/standard/tests/strings/substr_replace_error.phpt b/ext/standard/tests/strings/substr_replace_error.phpt index fd314cbd9d2..0a15035af2e 100644 --- a/ext/standard/tests/strings/substr_replace_error.phpt +++ b/ext/standard/tests/strings/substr_replace_error.phpt @@ -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=== \ No newline at end of file +===DONE===