diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter.c b/ext/mbstring/libmbfl/mbfl/mbfilter.c index 50a0853665a..a2c117d2a30 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfilter.c +++ b/ext/mbstring/libmbfl/mbfl/mbfilter.c @@ -462,10 +462,9 @@ enum mbfl_no_encoding mbfl_encoding_detector_judge(mbfl_encoding_detector *ident while (n >= 0) { filter = identd->filter_list[n]; if (!filter->flag) { - if (identd->strict && filter->status) { - continue; + if (!identd->strict || !filter->status) { + encoding = filter->encoding->no_encoding; } - encoding = filter->encoding->no_encoding; } n--; } diff --git a/ext/mbstring/tests/bug45239.phpt b/ext/mbstring/tests/bug45239.phpt new file mode 100644 index 00000000000..8d8ef4831ea --- /dev/null +++ b/ext/mbstring/tests/bug45239.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #45239 (encoding detector hangs with mbstring.strict_detection enabled) +--INI-- +mbstring.strict_detection=1 +mbstring.http_input=UTF-8 +mbstring.internal_encoding=UTF-8 +--SKIPIF-- + +--FILE-- + +--EXPECT-- +string(5) "UTF-8"