@@ -2246,7 +2246,9 @@ static zend_string* mb_get_substr(zend_string *input, size_t from, size_t len, c
22462246 }
22472247 }
22482248 zend_string * result = zend_string_init_fast ((const char * )start , stop - start );
2249- if (!ZSTR_IS_INTERNED (result )) {
2249+ if (ZSTR_IS_INTERNED (result )) {
2250+ GC_ADD_FLAGS_ATOMIC (result , IS_STR_VALID_UTF8 );
2251+ } else {
22502252 GC_ADD_FLAGS (result , IS_STR_VALID_UTF8 );
22512253 }
22522254 return result ;
@@ -2364,8 +2366,12 @@ PHP_FUNCTION(mb_substr_count)
23642366 } else {
23652367 unsigned int num_errors = 0 ;
23662368 haystack_u8 = mb_fast_convert ((unsigned char * )ZSTR_VAL (haystack ), ZSTR_LEN (haystack ), enc , & mbfl_encoding_utf8 , 0 , MBFL_OUTPUTFILTER_ILLEGAL_MODE_BADUTF8 , & num_errors );
2367- if (!num_errors && !ZSTR_IS_INTERNED (haystack )) {
2368- GC_ADD_FLAGS (haystack , IS_STR_VALID_UTF8 );
2369+ if (!num_errors ) {
2370+ if (ZSTR_IS_INTERNED (haystack )) {
2371+ GC_ADD_FLAGS_ATOMIC (haystack , IS_STR_VALID_UTF8 );
2372+ } else {
2373+ GC_ADD_FLAGS (haystack , IS_STR_VALID_UTF8 );
2374+ }
23692375 }
23702376 }
23712377
@@ -2374,8 +2380,12 @@ PHP_FUNCTION(mb_substr_count)
23742380 } else {
23752381 unsigned int num_errors = 0 ;
23762382 needle_u8 = mb_fast_convert ((unsigned char * )ZSTR_VAL (needle ), ZSTR_LEN (needle ), enc , & mbfl_encoding_utf8 , 0 , MBFL_OUTPUTFILTER_ILLEGAL_MODE_BADUTF8 , & num_errors );
2377- if (!num_errors && !ZSTR_IS_INTERNED (needle )) {
2378- GC_ADD_FLAGS (needle , IS_STR_VALID_UTF8 );
2383+ if (!num_errors ) {
2384+ if (ZSTR_IS_INTERNED (needle )) {
2385+ GC_ADD_FLAGS_ATOMIC (needle , IS_STR_VALID_UTF8 );
2386+ } else {
2387+ GC_ADD_FLAGS (needle , IS_STR_VALID_UTF8 );
2388+ }
23792389 }
23802390 }
23812391 } else {
@@ -5756,8 +5766,12 @@ static bool mb_check_str_encoding(zend_string *str, const mbfl_encoding *encodin
57565766 return true;
57575767 }
57585768 bool result = mb_fast_check_utf8 (str );
5759- if (result && !ZSTR_IS_INTERNED (str )) {
5760- GC_ADD_FLAGS (str , IS_STR_VALID_UTF8 );
5769+ if (result ) {
5770+ if (ZSTR_IS_INTERNED (str )) {
5771+ GC_ADD_FLAGS_ATOMIC (str , IS_STR_VALID_UTF8 );
5772+ } else if (!ZSTR_IS_INTERNED (str )) {
5773+ GC_ADD_FLAGS (str , IS_STR_VALID_UTF8 );
5774+ }
57615775 }
57625776 return result ;
57635777 } else {
0 commit comments