Skip to content

Commit b721d0f

Browse files
pakutomaalexdowad
authored andcommitted
Fix GH-10648: add check function pointer into mbfl_encoding
Previously, mbstring used the same logic for encoding validation as for encoding conversion. However, there are cases where we want to use different logic for validation and conversion. For example, if a string ends up with missing input required by the encoding, or if a character is input that is invalid as an encoding but can be converted, the conversion should succeed and the validation should fail. To achieve this, a function pointer mb_check_fn has been added to struct mbfl_encoding to implement the logic used for validation. Also, added implementation of validation logic for UTF-7, UTF7-IMAP, ISO-2022-JP and JIS. (The same change has already been made to PHP 8.2 and 8.3; see 6fc8d01. This commit is backporting the change to PHP 8.1.)
1 parent 8930bf8 commit b721d0f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+1637
-96
lines changed

UPGRADING

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,16 @@ PHP 8.1 UPGRADE NOTES
489489
. All GMP function now accept octal string with the leading octal prefix ("0o"/"0O")
490490
RFC: https://wiki.php.net/rfc/explicit_octal_notation
491491

492+
- MBString
493+
. mb_check_encoding() now checks input encoding more strictly.
494+
. mb_detect_encoding() now checks input encoding more strictly
495+
when strict detection is enabled.
496+
. mb_convert_encoding() checks the input encoding more strictly
497+
if multiple encodings are passed to from_encoding
498+
and the mbstring.strict_detection INI directive is set to 1.
499+
This change only affects the encoding selection,
500+
not the result of the conversion.
501+
492502
- PDO ODBC:
493503
. PDO::getAttributes() with PDO::ATTR_SERVER_INFO and PDO::ATTR_SERVER_VERSION
494504
now return values instead of throwing PDOException.

ext/mbstring/libmbfl/filters/mbfilter_7bit.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ const mbfl_encoding mbfl_encoding_7bit = {
3939
NULL,
4040
MBFL_ENCTYPE_SBCS,
4141
NULL,
42+
NULL,
4243
NULL
4344
};
4445

ext/mbstring/libmbfl/filters/mbfilter_base64.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ const mbfl_encoding mbfl_encoding_base64 = {
3939
NULL,
4040
MBFL_ENCTYPE_GL_UNSAFE,
4141
NULL,
42+
NULL,
4243
NULL
4344
};
4445

ext/mbstring/libmbfl/filters/mbfilter_big5.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ const mbfl_encoding mbfl_encoding_big5 = {
6363
mblen_table_big5,
6464
MBFL_ENCTYPE_GL_UNSAFE,
6565
&vtbl_big5_wchar,
66-
&vtbl_wchar_big5
66+
&vtbl_wchar_big5,
67+
NULL
6768
};
6869

6970
const mbfl_encoding mbfl_encoding_cp950 = {
@@ -74,7 +75,8 @@ const mbfl_encoding mbfl_encoding_cp950 = {
7475
mblen_table_big5,
7576
MBFL_ENCTYPE_GL_UNSAFE,
7677
&vtbl_cp950_wchar,
77-
&vtbl_wchar_cp950
78+
&vtbl_wchar_cp950,
79+
NULL
7880
};
7981

8082
const struct mbfl_convert_vtbl vtbl_big5_wchar = {

ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ const mbfl_encoding mbfl_encoding_cp50220 = {
5454
NULL,
5555
MBFL_ENCTYPE_GL_UNSAFE,
5656
&vtbl_cp50220_wchar,
57-
&vtbl_wchar_cp50220
57+
&vtbl_wchar_cp50220,
58+
NULL
5859
};
5960

6061
const mbfl_encoding mbfl_encoding_cp50221 = {
@@ -65,7 +66,8 @@ const mbfl_encoding mbfl_encoding_cp50221 = {
6566
NULL,
6667
MBFL_ENCTYPE_GL_UNSAFE,
6768
&vtbl_cp50221_wchar,
68-
&vtbl_wchar_cp50221
69+
&vtbl_wchar_cp50221,
70+
NULL
6971
};
7072

7173
const mbfl_encoding mbfl_encoding_cp50222 = {
@@ -76,7 +78,8 @@ const mbfl_encoding mbfl_encoding_cp50222 = {
7678
NULL,
7779
MBFL_ENCTYPE_GL_UNSAFE,
7880
&vtbl_cp50222_wchar,
79-
&vtbl_wchar_cp50222
81+
&vtbl_wchar_cp50222,
82+
NULL
8083
};
8184

8285
const struct mbfl_convert_vtbl vtbl_cp50220_wchar = {

ext/mbstring/libmbfl/filters/mbfilter_cp51932.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ const mbfl_encoding mbfl_encoding_cp51932 = {
6565
mblen_table_eucjp,
6666
0,
6767
&vtbl_cp51932_wchar,
68-
&vtbl_wchar_cp51932
68+
&vtbl_wchar_cp51932,
69+
NULL
6970
};
7071

7172
const struct mbfl_convert_vtbl vtbl_cp51932_wchar = {

ext/mbstring/libmbfl/filters/mbfilter_cp932.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ const mbfl_encoding mbfl_encoding_cp932 = {
9595
mblen_table_sjis,
9696
MBFL_ENCTYPE_GL_UNSAFE,
9797
&vtbl_cp932_wchar,
98-
&vtbl_wchar_cp932
98+
&vtbl_wchar_cp932,
99+
NULL
99100
};
100101

101102
const struct mbfl_convert_vtbl vtbl_cp932_wchar = {
@@ -126,7 +127,8 @@ const mbfl_encoding mbfl_encoding_sjiswin = {
126127
mblen_table_sjis,
127128
MBFL_ENCTYPE_GL_UNSAFE,
128129
&vtbl_sjiswin_wchar,
129-
&vtbl_wchar_sjiswin
130+
&vtbl_wchar_sjiswin,
131+
NULL
130132
};
131133

132134
const struct mbfl_convert_vtbl vtbl_sjiswin_wchar = {

ext/mbstring/libmbfl/filters/mbfilter_cp936.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ const mbfl_encoding mbfl_encoding_cp936 = {
6363
mblen_table_cp936,
6464
MBFL_ENCTYPE_GL_UNSAFE,
6565
&vtbl_cp936_wchar,
66-
&vtbl_wchar_cp936
66+
&vtbl_wchar_cp936,
67+
NULL
6768
};
6869

6970
const struct mbfl_convert_vtbl vtbl_cp936_wchar = {

ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ const mbfl_encoding mbfl_encoding_euc_cn = {
6363
mblen_table_euccn,
6464
0,
6565
&vtbl_euccn_wchar,
66-
&vtbl_wchar_euccn
66+
&vtbl_wchar_euccn,
67+
NULL
6768
};
6869

6970
const struct mbfl_convert_vtbl vtbl_euccn_wchar = {

ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ const mbfl_encoding mbfl_encoding_euc_jp = {
6464
mblen_table_eucjp,
6565
0,
6666
&vtbl_eucjp_wchar,
67-
&vtbl_wchar_eucjp
67+
&vtbl_wchar_eucjp,
68+
NULL
6869
};
6970

7071
const struct mbfl_convert_vtbl vtbl_eucjp_wchar = {

ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ const mbfl_encoding mbfl_encoding_eucjp2004 = {
4343
mblen_table_eucjp,
4444
0,
4545
&vtbl_eucjp2004_wchar,
46-
&vtbl_wchar_eucjp2004
46+
&vtbl_wchar_eucjp2004,
47+
NULL
4748
};
4849

4950
const struct mbfl_convert_vtbl vtbl_eucjp2004_wchar = {

ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ const mbfl_encoding mbfl_encoding_eucjp_win = {
6565
mblen_table_eucjp,
6666
0,
6767
&vtbl_eucjpwin_wchar,
68-
&vtbl_wchar_eucjpwin
68+
&vtbl_wchar_eucjpwin,
69+
NULL
6970
};
7071

7172
const struct mbfl_convert_vtbl vtbl_eucjpwin_wchar = {

ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ const mbfl_encoding mbfl_encoding_euc_kr = {
6262
mblen_table_euckr,
6363
0,
6464
&vtbl_euckr_wchar,
65-
&vtbl_wchar_euckr
65+
&vtbl_wchar_euckr,
66+
NULL
6667
};
6768

6869
const struct mbfl_convert_vtbl vtbl_euckr_wchar = {

ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ const mbfl_encoding mbfl_encoding_euc_tw = {
6464
mblen_table_euctw,
6565
0,
6666
&vtbl_euctw_wchar,
67-
&vtbl_wchar_euctw
67+
&vtbl_wchar_euctw,
68+
NULL
6869
};
6970

7071
const struct mbfl_convert_vtbl vtbl_euctw_wchar = {

ext/mbstring/libmbfl/filters/mbfilter_gb18030.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ const mbfl_encoding mbfl_encoding_gb18030 = {
4545
NULL,
4646
MBFL_ENCTYPE_GL_UNSAFE,
4747
&vtbl_gb18030_wchar,
48-
&vtbl_wchar_gb18030
48+
&vtbl_wchar_gb18030,
49+
NULL
4950
};
5051

5152
const struct mbfl_convert_vtbl vtbl_gb18030_wchar = {

ext/mbstring/libmbfl/filters/mbfilter_htmlent.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ const mbfl_encoding mbfl_encoding_html_ent = {
6161
NULL,
6262
MBFL_ENCTYPE_GL_UNSAFE,
6363
&vtbl_html_wchar,
64-
&vtbl_wchar_html
64+
&vtbl_wchar_html,
65+
NULL
6566
};
6667

6768
const struct mbfl_convert_vtbl vtbl_wchar_html = {

ext/mbstring/libmbfl/filters/mbfilter_hz.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ const mbfl_encoding mbfl_encoding_hz = {
4343
NULL,
4444
MBFL_ENCTYPE_GL_UNSAFE,
4545
&vtbl_hz_wchar,
46-
&vtbl_wchar_hz
46+
&vtbl_wchar_hz,
47+
NULL
4748
};
4849

4950
const struct mbfl_convert_vtbl vtbl_hz_wchar = {

ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ const mbfl_encoding mbfl_encoding_2022jpms = {
4646
NULL,
4747
MBFL_ENCTYPE_GL_UNSAFE,
4848
&vtbl_2022jpms_wchar,
49-
&vtbl_wchar_2022jpms
49+
&vtbl_wchar_2022jpms,
50+
NULL
5051
};
5152

5253
const struct mbfl_convert_vtbl vtbl_2022jpms_wchar = {

ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ const mbfl_encoding mbfl_encoding_2022kr = {
4747
NULL,
4848
MBFL_ENCTYPE_GL_UNSAFE,
4949
&vtbl_2022kr_wchar,
50-
&vtbl_wchar_2022kr
50+
&vtbl_wchar_2022kr,
51+
NULL
5152
};
5253

5354
const struct mbfl_convert_vtbl vtbl_wchar_2022kr = {

ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_2004.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ const mbfl_encoding mbfl_encoding_2022jp_2004 = {
4343
NULL,
4444
MBFL_ENCTYPE_GL_UNSAFE,
4545
&vtbl_2022jp_2004_wchar,
46-
&vtbl_wchar_2022jp_2004
46+
&vtbl_wchar_2022jp_2004,
47+
NULL
4748
};
4849

4950
const struct mbfl_convert_vtbl vtbl_2022jp_2004_wchar = {

ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ const mbfl_encoding mbfl_encoding_2022jp_kddi = {
4848
NULL,
4949
MBFL_ENCTYPE_GL_UNSAFE,
5050
&vtbl_2022jp_kddi_wchar,
51-
&vtbl_wchar_2022jp_kddi
51+
&vtbl_wchar_2022jp_kddi,
52+
NULL
5253
};
5354

5455
const struct mbfl_convert_vtbl vtbl_2022jp_kddi_wchar = {

0 commit comments

Comments
 (0)