From 5acbd21ccefd3cb418deac5b4a3f9e36f99c159e Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Fri, 3 Dec 2021 18:41:45 +0100 Subject: [PATCH 1/2] Fix #81693: mb_check_encoding(7bit) segfaults `php_mb_check_encoding()` now uses conversion to `mbfl_encoding_wchar`. Since `mbfl_encoding_7bit` has no `input_filter`, no filter can be found. Since we don't actually need to convert to wchar, we encode to 8bit. --- ext/mbstring/libmbfl/mbfl/mbfl_convert.c | 5 +++-- ext/mbstring/tests/bug81693.phpt | 10 ++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 ext/mbstring/tests/bug81693.phpt diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c index dda978a71223b..7fa3e72156a5b 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c +++ b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c @@ -307,7 +307,8 @@ const struct mbfl_convert_vtbl* mbfl_convert_filter_get_vtbl(const mbfl_encoding from = &mbfl_encoding_8bit; } else if (from->no_encoding == mbfl_no_encoding_base64 || from->no_encoding == mbfl_no_encoding_qprint || - from->no_encoding == mbfl_no_encoding_uuencode) { + from->no_encoding == mbfl_no_encoding_uuencode || + from->no_encoding == mbfl_no_encoding_7bit) { to = &mbfl_encoding_8bit; } @@ -315,7 +316,7 @@ const struct mbfl_convert_vtbl* mbfl_convert_filter_get_vtbl(const mbfl_encoding return &vtbl_pass; } - if (to->no_encoding == mbfl_no_encoding_wchar) { + if (to->no_encoding == mbfl_no_encoding_wchar && from->input_filter != NULL) { return from->input_filter; } else if (from->no_encoding == mbfl_no_encoding_wchar) { return to->output_filter; diff --git a/ext/mbstring/tests/bug81693.phpt b/ext/mbstring/tests/bug81693.phpt new file mode 100644 index 0000000000000..ae52453f8765d --- /dev/null +++ b/ext/mbstring/tests/bug81693.phpt @@ -0,0 +1,10 @@ +--TEST-- +Bug #81693 (mb_check_encoding(7bit) segfaults) +--EXTENSIONS-- +mbstring +--FILE-- + +--EXPECT-- +bool(true) From 8460d82cd061ffd68db039a3fe8fe6e182121a26 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Fri, 3 Dec 2021 18:43:59 +0100 Subject: [PATCH 2/2] remove dev relict --- ext/mbstring/libmbfl/mbfl/mbfl_convert.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c index 7fa3e72156a5b..f6e860a35aead 100644 --- a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c +++ b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c @@ -316,7 +316,7 @@ const struct mbfl_convert_vtbl* mbfl_convert_filter_get_vtbl(const mbfl_encoding return &vtbl_pass; } - if (to->no_encoding == mbfl_no_encoding_wchar && from->input_filter != NULL) { + if (to->no_encoding == mbfl_no_encoding_wchar) { return from->input_filter; } else if (from->no_encoding == mbfl_no_encoding_wchar) { return to->output_filter;