diff options
author | Moriyoshi Koizumi <moriyoshi@php.net> | 2009-09-11 21:26:18 +0000 |
---|---|---|
committer | Moriyoshi Koizumi <moriyoshi@php.net> | 2009-09-11 21:26:18 +0000 |
commit | afe681c301b75356b6bf766bee02973e8a14968a (patch) | |
tree | 043942dbb878fa608a83b085704bec6b2c69fabd | |
parent | 30a6d1b85137f7159169eaae6ffb20292dcc4a87 (diff) | |
download | php-git-afe681c301b75356b6bf766bee02973e8a14968a.tar.gz |
- Fix bug #49536 (mb_detect_encoding() returns incorrect results when strict_mode is turned on.)
(patch by komura, thanks!)
-rw-r--r-- | ext/mbstring/libmbfl/filters/mbfilter_utf8.c | 2 | ||||
-rw-r--r-- | ext/mbstring/libmbfl/mbfl/mbfilter.c | 2 | ||||
-rw-r--r-- | ext/mbstring/tests/bug49536.phpt | 20 |
3 files changed, 22 insertions, 2 deletions
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf8.c b/ext/mbstring/libmbfl/filters/mbfilter_utf8.c index 20ff983e11..c6777b29fd 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf8.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf8.c @@ -220,7 +220,7 @@ static int mbfl_filt_ident_utf8(int c, mbfl_identify_filter *filter) if (c < 0x80) { if (c < 0) { filter->flag = 1; /* bad */ - } else if (c != 0 && filter->status) { + } else if (filter->status) { filter->flag = 1; /* bad */ } filter->status = 0; diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter.c b/ext/mbstring/libmbfl/mbfl/mbfilter.c index 1aeb38cc9b..4997c5a886 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfilter.c +++ b/ext/mbstring/libmbfl/mbfl/mbfilter.c @@ -622,7 +622,7 @@ mbfl_identify_encoding(mbfl_string *string, enum mbfl_no_encoding *elist, int el if (!encoding) { for (i = 0; i < num; i++) { filter = &flist[i]; - if (!filter->flag) { + if (!filter->flag && (!strict || !filter->status)) { encoding = filter->encoding; break; } diff --git a/ext/mbstring/tests/bug49536.phpt b/ext/mbstring/tests/bug49536.phpt new file mode 100644 index 0000000000..32685d2267 --- /dev/null +++ b/ext/mbstring/tests/bug49536.phpt @@ -0,0 +1,20 @@ +--TEST-- +Bug #49536 (mb_detect_encoding() returns incorrect results when strict_mode is turned on) +--SKIPIF-- +<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?> +--FILE-- +<?php +// non-strict mode +var_dump(mb_detect_encoding("A\x81", "SJIS", false)); +// strict mode +var_dump(mb_detect_encoding("A\x81", "SJIS", true)); +// non-strict mode +var_dump(mb_detect_encoding("\xc0\x00", "UTF-8", false)); +// strict mode +var_dump(mb_detect_encoding("\xc0\x00", "UTF-8", true)); +?> +--EXPECT-- +string(4) "SJIS" +bool(false) +string(5) "UTF-8" +bool(false) |