From: Alex Dowad Date: Sun, 6 Sep 2020 11:13:37 +0000 (+0200) Subject: Add identify filter for UCS-2, UCS-2BE, and UCS-2LE encodings X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=648c1cb51e1b06171e625f1b2dd812b6227b1b2b;p=php Add identify filter for UCS-2, UCS-2BE, and UCS-2LE encodings --- diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c b/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c index 9df11cb1d0..258c564aae 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c @@ -30,6 +30,8 @@ #include "mbfilter.h" #include "mbfilter_ucs2.h" +static int mbfl_filt_ident_ucs2(int c, mbfl_identify_filter *filter); + static const char *mbfl_encoding_ucs2_aliases[] = {"ISO-10646-UCS-2", "UCS2" , "UNICODE", NULL}; const mbfl_encoding mbfl_encoding_ucs2 = { @@ -65,6 +67,24 @@ const mbfl_encoding mbfl_encoding_ucs2le = { &vtbl_wchar_ucs2le }; +const struct mbfl_identify_vtbl vtbl_identify_ucs2 = { + mbfl_no_encoding_ucs2, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_ucs2 +}; + +const struct mbfl_identify_vtbl vtbl_identify_ucs2be = { + mbfl_no_encoding_ucs2be, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_ucs2 +}; + +const struct mbfl_identify_vtbl vtbl_identify_ucs2le = { + mbfl_no_encoding_ucs2le, + mbfl_filt_ident_common_ctor, + mbfl_filt_ident_ucs2 +}; + const struct mbfl_convert_vtbl vtbl_ucs2_wchar = { mbfl_no_encoding_ucs2, mbfl_no_encoding_wchar, @@ -237,3 +257,10 @@ int mbfl_filt_conv_wchar_ucs2le(int c, mbfl_convert_filter *filter) return c; } + +static int mbfl_filt_ident_ucs2(int c, mbfl_identify_filter *filter) +{ + /* Input string must be a multiple of 2 bytes */ + filter->status = (filter->status + 1) % 2; + return c; +} diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ucs2.h b/ext/mbstring/libmbfl/filters/mbfilter_ucs2.h index bbf567a493..f6d9b8b772 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_ucs2.h +++ b/ext/mbstring/libmbfl/filters/mbfilter_ucs2.h @@ -35,6 +35,9 @@ extern const mbfl_encoding mbfl_encoding_ucs2; extern const mbfl_encoding mbfl_encoding_ucs2be; extern const mbfl_encoding mbfl_encoding_ucs2le; +extern const struct mbfl_identify_vtbl vtbl_identify_ucs2; +extern const struct mbfl_identify_vtbl vtbl_identify_ucs2be; +extern const struct mbfl_identify_vtbl vtbl_identify_ucs2le; extern const struct mbfl_convert_vtbl vtbl_ucs2_wchar; extern const struct mbfl_convert_vtbl vtbl_wchar_ucs2; extern const struct mbfl_convert_vtbl vtbl_ucs2be_wchar; diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_ident.c b/ext/mbstring/libmbfl/mbfl/mbfl_ident.c index e6163d538c..a92d55daa3 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfl_ident.c +++ b/ext/mbstring/libmbfl/mbfl/mbfl_ident.c @@ -164,6 +164,9 @@ static const struct mbfl_identify_vtbl *mbfl_identify_filter_list[] = { &vtbl_identify_utf16le, &vtbl_identify_utf16be, &vtbl_identify_8bit, + &vtbl_identify_ucs2, + &vtbl_identify_ucs2be, + &vtbl_identify_ucs2le, &vtbl_identify_false, NULL };