diff --git a/ext/standard/string.c b/ext/standard/string.c index 622ed3a9d43..881e172c6c2 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -5059,6 +5059,7 @@ PHP_FUNCTION(str_repeat) /* Initialize the result string */ result = zend_string_safe_alloc(ZSTR_LEN(input_str), mult, 0, 0); result_len = ZSTR_LEN(input_str) * mult; + ZSTR_COPY_CONCAT_PROPERTIES(result, input_str); /* Heavy optimization for situations where input string is 1 byte long */ if (ZSTR_LEN(input_str) == 1) { diff --git a/ext/zend_test/tests/strings_marked_as_utf8.phpt b/ext/zend_test/tests/strings_marked_as_utf8.phpt index 5b6dfb6a076..1519459f1da 100644 --- a/ext/zend_test/tests/strings_marked_as_utf8.phpt +++ b/ext/zend_test/tests/strings_marked_as_utf8.phpt @@ -107,6 +107,14 @@ $s = $o . $o; var_dump($s); var_dump(zend_test_is_string_marked_as_valid_utf8($s)); +echo "str_repeat:\n"; +$string = "a"; +$string_concat = str_repeat($string, 100); +var_dump(zend_test_is_string_marked_as_valid_utf8($string_concat)); +$string = "\xff"; +$string_concat = str_repeat($string, 100); +var_dump(zend_test_is_string_marked_as_valid_utf8($string_concat)); + ?> --EXPECT-- Empty strings: @@ -148,3 +156,6 @@ bool(true) Concatenation of objects: string(2) "zz" bool(true) +str_repeat: +bool(true) +bool(false)