summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rw-r--r--ext/imap/php_imap.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_7bit.c18
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_7bit.h1
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_armscii8.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_ascii.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_big5.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp1251.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp1252.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp1254.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c6
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp51932.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp850.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp866.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp932.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_cp936.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c4
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_gb18030.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_htmlent.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_koi8r.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_koi8u.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_qprint.c5
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c6
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_sjis_open.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_ucs2.c29
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_ucs2.h3
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_ucs4.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_uhc.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf16.c178
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf16.h3
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf32.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf7.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c84
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf8.c2
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c8
-rw-r--r--ext/mbstring/libmbfl/filters/unicode_prop.h272
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter.c27
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c8
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h1
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter_pass.c2
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_convert.c2
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_encoding.c100
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_encoding.h14
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_ident.c69
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_ident.h4
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c142
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h2
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_string.c25
-rw-r--r--ext/mbstring/mbstring.c10
-rw-r--r--ext/mbstring/tests/mb_convert_encoding_failed_detection.phpt2
-rw-r--r--ext/mysqlnd/mysqlnd_ps.c2
-rw-r--r--ext/pdo/pdo_dbh.c8
-rw-r--r--ext/pdo/php_pdo_driver.h5
-rw-r--r--ext/pdo_dblib/dblib_driver.c3
-rw-r--r--ext/pdo_firebird/firebird_driver.c6
-rw-r--r--ext/pdo_mysql/mysql_driver.c3
-rw-r--r--ext/pdo_oci/oci_driver.c7
-rw-r--r--ext/pdo_odbc/odbc_driver.c6
-rw-r--r--ext/pdo_pgsql/pgsql_driver.c1
-rw-r--r--ext/pdo_sqlite/sqlite_driver.c22
-rw-r--r--ext/pdo_sqlite/tests/gc.phpt24
-rw-r--r--ext/sockets/sockets.c6
-rw-r--r--ext/sodium/config.m43
-rw-r--r--ext/standard/php_http.h1
87 files changed, 698 insertions, 516 deletions
diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c
index 18502b9fd9..27ea5b4e15 100644
--- a/ext/imap/php_imap.c
+++ b/ext/imap/php_imap.c
@@ -2758,7 +2758,7 @@ PHP_FUNCTION(imap_sort)
}
array_init(return_value);
- if (slst != NIL && slst != 0) {
+ if (slst != NULL) {
for (sl = slst; *sl; sl++) {
add_next_index_long(return_value, *sl);
}
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_7bit.c b/ext/mbstring/libmbfl/filters/mbfilter_7bit.c
index 42ed23326d..331dc8e743 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_7bit.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_7bit.c
@@ -31,6 +31,8 @@
#include "mbfilter.h"
#include "mbfilter_7bit.h"
+static int mbfl_filt_ident_7bit(int c, mbfl_identify_filter *filter);
+
const mbfl_encoding mbfl_encoding_7bit = {
mbfl_no_encoding_7bit,
"7bit",
@@ -42,6 +44,12 @@ const mbfl_encoding mbfl_encoding_7bit = {
NULL
};
+const struct mbfl_identify_vtbl vtbl_identify_7bit = {
+ mbfl_no_encoding_7bit,
+ mbfl_filt_ident_common_ctor,
+ mbfl_filt_ident_7bit
+};
+
const struct mbfl_convert_vtbl vtbl_8bit_7bit = {
mbfl_no_encoding_8bit,
mbfl_no_encoding_7bit,
@@ -75,6 +83,16 @@ int mbfl_filt_conv_any_7bit(int c, mbfl_convert_filter *filter)
{
if (c >= 0 && c < 0x80) {
CK((*filter->output_function)(c, filter->data));
+ } else {
+ mbfl_filt_conv_illegal_output(c, filter);
+ }
+ return c;
+}
+
+static int mbfl_filt_ident_7bit(int c, mbfl_identify_filter *filter)
+{
+ if (c >= 0x80) {
+ filter->flag = 1;
}
return c;
}
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_7bit.h b/ext/mbstring/libmbfl/filters/mbfilter_7bit.h
index d0dfe2c518..f842a2ad3b 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_7bit.h
+++ b/ext/mbstring/libmbfl/filters/mbfilter_7bit.h
@@ -34,6 +34,7 @@
#include "mbfilter.h"
extern const mbfl_encoding mbfl_encoding_7bit;
+extern const struct mbfl_identify_vtbl vtbl_identify_7bit;
extern const struct mbfl_convert_vtbl vtbl_8bit_7bit;
extern const struct mbfl_convert_vtbl vtbl_7bit_8bit;
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_armscii8.c b/ext/mbstring/libmbfl/filters/mbfilter_armscii8.c
index 38c8f98bd1..e2fa8d86ea 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_armscii8.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_armscii8.c
@@ -38,7 +38,7 @@ const mbfl_encoding mbfl_encoding_armscii8 = {
mbfl_no_encoding_armscii8,
"ArmSCII-8",
"ArmSCII-8",
- (const char *(*)[])&mbfl_encoding_armscii8_aliases,
+ mbfl_encoding_armscii8_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_armscii8_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ascii.c b/ext/mbstring/libmbfl/filters/mbfilter_ascii.c
index 43d659a46c..4e02c26aac 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_ascii.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_ascii.c
@@ -39,7 +39,7 @@ const mbfl_encoding mbfl_encoding_ascii = {
mbfl_no_encoding_ascii,
"ASCII",
"US-ASCII", /* preferred MIME name */
- (const char *(*)[])&mbfl_encoding_ascii_aliases,
+ mbfl_encoding_ascii_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_ascii_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_big5.c b/ext/mbstring/libmbfl/filters/mbfilter_big5.c
index 1e59924092..95c75a37e3 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_big5.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_big5.c
@@ -59,7 +59,7 @@ const mbfl_encoding mbfl_encoding_big5 = {
mbfl_no_encoding_big5,
"BIG-5",
"BIG5",
- (const char *(*)[])&mbfl_encoding_big5_aliases,
+ mbfl_encoding_big5_aliases,
mblen_table_big5,
MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
&vtbl_big5_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1251.c b/ext/mbstring/libmbfl/filters/mbfilter_cp1251.c
index 470adf1a08..af05b5ec6d 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp1251.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_cp1251.c
@@ -39,7 +39,7 @@ const mbfl_encoding mbfl_encoding_cp1251 = {
mbfl_no_encoding_cp1251,
"Windows-1251",
"Windows-1251",
- (const char *(*)[])&mbfl_encoding_cp1251_aliases,
+ mbfl_encoding_cp1251_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_cp1251_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1252.c b/ext/mbstring/libmbfl/filters/mbfilter_cp1252.c
index a274e4b796..1f6717d2ac 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp1252.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_cp1252.c
@@ -39,7 +39,7 @@ const mbfl_encoding mbfl_encoding_cp1252 = {
mbfl_no_encoding_cp1252,
"Windows-1252",
"Windows-1252",
- (const char *(*)[])&mbfl_encoding_cp1252_aliases,
+ mbfl_encoding_cp1252_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_cp1252_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp1254.c b/ext/mbstring/libmbfl/filters/mbfilter_cp1254.c
index 7e4bb4b148..eebd5b322a 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp1254.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_cp1254.c
@@ -39,7 +39,7 @@ const mbfl_encoding mbfl_encoding_cp1254 = {
mbfl_no_encoding_cp1254,
"Windows-1254",
"Windows-1254",
- (const char *(*)[])&mbfl_encoding_cp1254_aliases,
+ mbfl_encoding_cp1254_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_cp1254_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c b/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c
index 3879f9eb5b..798487d342 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c
@@ -59,7 +59,7 @@ const mbfl_encoding mbfl_encoding_cp50220 = {
mbfl_no_encoding_cp50220,
"CP50220",
"ISO-2022-JP",
- (const char *(*)[])NULL,
+ NULL,
NULL,
MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
&vtbl_cp50220_wchar,
@@ -70,7 +70,7 @@ const mbfl_encoding mbfl_encoding_cp50220raw = {
mbfl_no_encoding_cp50220raw,
"CP50220raw",
"ISO-2022-JP",
- (const char *(*)[])NULL,
+ NULL,
NULL,
MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
&vtbl_cp50220raw_wchar,
@@ -585,7 +585,7 @@ mbfl_filt_conv_wchar_cp50220_ctor(mbfl_convert_filter *filt)
ctx->last.opaque = ctx;
ctx->last.data = filt->data;
filt->filter_function = vtbl_tl_jisx0201_jisx0208.filter_function;
- filt->filter_flush = vtbl_tl_jisx0201_jisx0208.filter_flush;
+ filt->filter_flush = (filter_flush_t)vtbl_tl_jisx0201_jisx0208.filter_flush;
filt->output_function = (output_function_t)ctx->last.filter_function;
filt->flush_function = (flush_function_t)ctx->last.filter_flush;
filt->data = &ctx->last;
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp51932.c b/ext/mbstring/libmbfl/filters/mbfilter_cp51932.c
index da046c86b7..9b893bc638 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp51932.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_cp51932.c
@@ -68,7 +68,7 @@ const mbfl_encoding mbfl_encoding_cp51932 = {
mbfl_no_encoding_cp51932,
"CP51932",
"CP51932",
- (const char *(*)[])&mbfl_encoding_cp51932_aliases,
+ mbfl_encoding_cp51932_aliases,
mblen_table_eucjp,
MBFL_ENCTYPE_MBCS,
&vtbl_cp51932_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp850.c b/ext/mbstring/libmbfl/filters/mbfilter_cp850.c
index 5d6b265fc1..d9d705f70f 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp850.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_cp850.c
@@ -35,7 +35,7 @@ const mbfl_encoding mbfl_encoding_cp850 = {
mbfl_no_encoding_cp850,
"CP850",
"CP850",
- (const char *(*)[])&mbfl_encoding_cp850_aliases,
+ mbfl_encoding_cp850_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_cp850_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp866.c b/ext/mbstring/libmbfl/filters/mbfilter_cp866.c
index 504903bef0..9c548627b0 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp866.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_cp866.c
@@ -39,7 +39,7 @@ const mbfl_encoding mbfl_encoding_cp866 = {
mbfl_no_encoding_cp866,
"CP866",
"CP866",
- (const char *(*)[])&mbfl_encoding_cp866_aliases,
+ mbfl_encoding_cp866_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_cp866_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp932.c b/ext/mbstring/libmbfl/filters/mbfilter_cp932.c
index 3cbca1cb64..511d864465 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp932.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_cp932.c
@@ -60,7 +60,7 @@ const mbfl_encoding mbfl_encoding_cp932 = {
mbfl_no_encoding_cp932,
"CP932",
"Shift_JIS",
- (const char *(*)[])&mbfl_encoding_cp932_aliases,
+ mbfl_encoding_cp932_aliases,
mblen_table_sjis,
MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
&vtbl_cp932_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cp936.c b/ext/mbstring/libmbfl/filters/mbfilter_cp936.c
index df6d77907f..d73954267f 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_cp936.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_cp936.c
@@ -59,7 +59,7 @@ const mbfl_encoding mbfl_encoding_cp936 = {
mbfl_no_encoding_cp936,
"CP936",
"CP936",
- (const char *(*)[])&mbfl_encoding_cp936_aliases,
+ mbfl_encoding_cp936_aliases,
mblen_table_cp936,
MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
&vtbl_cp936_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c
index 53a8aac2a6..0a7edaa927 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c
@@ -59,7 +59,7 @@ const mbfl_encoding mbfl_encoding_euc_cn = {
mbfl_no_encoding_euc_cn,
"EUC-CN",
"CN-GB",
- (const char *(*)[])&mbfl_encoding_euc_cn_aliases,
+ mbfl_encoding_euc_cn_aliases,
mblen_table_euccn,
MBFL_ENCTYPE_MBCS,
&vtbl_euccn_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c
index 252a10a58d..61da27f043 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c
@@ -60,7 +60,7 @@ const mbfl_encoding mbfl_encoding_euc_jp = {
mbfl_no_encoding_euc_jp,
"EUC-JP",
"EUC-JP",
- (const char *(*)[])&mbfl_encoding_euc_jp_aliases,
+ mbfl_encoding_euc_jp_aliases,
mblen_table_eucjp,
MBFL_ENCTYPE_MBCS,
&vtbl_eucjp_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.c
index 30d869cea5..c6c708b337 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_2004.c
@@ -40,7 +40,7 @@ const mbfl_encoding mbfl_encoding_eucjp2004 = {
mbfl_no_encoding_eucjp2004,
"EUC-JP-2004",
"EUC-JP",
- (const char *(*)[])&mbfl_encoding_eucjp2004_aliases,
+ mbfl_encoding_eucjp2004_aliases,
mblen_table_eucjp,
MBFL_ENCTYPE_MBCS,
&vtbl_eucjp2004_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c
index 5798bff0fc..7c1aebdea5 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c
@@ -69,7 +69,7 @@ const mbfl_encoding mbfl_encoding_eucjp_win = {
mbfl_no_encoding_eucjp_win,
"eucJP-win",
"EUC-JP",
- (const char *(*)[])&mbfl_encoding_eucjp_win_aliases,
+ mbfl_encoding_eucjp_win_aliases,
mblen_table_eucjp,
MBFL_ENCTYPE_MBCS,
&vtbl_eucjpwin_wchar,
@@ -319,8 +319,6 @@ mbfl_filt_conv_wchar_eucjpwin(int c, mbfl_convert_filter *filter)
s1 = 0x2172;
} else if (c == 0xffe2) { /* FULLWIDTH NOT SIGN */
s1 = 0x224c;
- } else if (c == 0xff5e) { /* FULLWIDTH TILDE */
- s1 = 0x2141;
} else {
s1 = -1;
c1 = 0;
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c
index e9b08e08c1..0c44a99860 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c
@@ -58,7 +58,7 @@ const mbfl_encoding mbfl_encoding_euc_kr = {
mbfl_no_encoding_euc_kr,
"EUC-KR",
"EUC-KR",
- (const char *(*)[])&mbfl_encoding_euc_kr_aliases,
+ mbfl_encoding_euc_kr_aliases,
mblen_table_euckr,
MBFL_ENCTYPE_MBCS,
&vtbl_euckr_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c b/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c
index c76eeb36bf..74bca29d47 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c
@@ -60,7 +60,7 @@ const mbfl_encoding mbfl_encoding_euc_tw = {
mbfl_no_encoding_euc_tw,
"EUC-TW",
"EUC-TW",
- (const char *(*)[])&mbfl_encoding_euc_tw_aliases,
+ mbfl_encoding_euc_tw_aliases,
mblen_table_euctw,
MBFL_ENCTYPE_MBCS,
&vtbl_euctw_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_gb18030.c b/ext/mbstring/libmbfl/filters/mbfilter_gb18030.c
index b94d664f40..ec6e3973a5 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_gb18030.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_gb18030.c
@@ -41,7 +41,7 @@ const mbfl_encoding mbfl_encoding_gb18030 = {
mbfl_no_encoding_gb18030,
"GB18030",
"GB18030",
- (const char *(*)[])&mbfl_encoding_gb18030_aliases,
+ mbfl_encoding_gb18030_aliases,
NULL,
MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
&vtbl_gb18030_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c b/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c
index 7176fd4717..95a0817103 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c
@@ -57,7 +57,7 @@ const mbfl_encoding mbfl_encoding_html_ent = {
mbfl_no_encoding_html_ent,
"HTML-ENTITIES",
"HTML-ENTITIES",
- (const char *(*)[])&mbfl_encoding_html_ent_aliases,
+ mbfl_encoding_html_ent_aliases,
NULL,
MBFL_ENCTYPE_GL_UNSAFE,
&vtbl_html_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c
index 1e9757eae6..32f4072ce2 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c
@@ -42,7 +42,7 @@ const mbfl_encoding mbfl_encoding_2022jpms = {
mbfl_no_encoding_2022jpms,
"ISO-2022-JP-MS",
"ISO-2022-JP",
- (const char *(*)[])&mbfl_encoding_2022jpms_aliases,
+ mbfl_encoding_2022jpms_aliases,
NULL,
MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
&vtbl_2022jpms_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c
index 32ea47712e..00f0ddeda8 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c
@@ -44,7 +44,7 @@ const mbfl_encoding mbfl_encoding_2022jp_kddi = {
mbfl_no_encoding_2022jp_kddi,
"ISO-2022-JP-MOBILE#KDDI",
"ISO-2022-JP",
- (const char *(*)[])&mbfl_encoding_2022jp_kddi_aliases,
+ mbfl_encoding_2022jp_kddi_aliases,
NULL,
MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
&vtbl_2022jp_kddi_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c
index 1549ba81bf..899234f3b0 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_1.c
@@ -36,7 +36,7 @@ const mbfl_encoding mbfl_encoding_8859_1 = {
mbfl_no_encoding_8859_1,
"ISO-8859-1",
"ISO-8859-1",
- (const char *(*)[])&mbfl_encoding_8859_1_aliases,
+ mbfl_encoding_8859_1_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_8859_1_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c
index 12cd960a88..e82c52f4b6 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_10.c
@@ -37,7 +37,7 @@ const mbfl_encoding mbfl_encoding_8859_10 = {
mbfl_no_encoding_8859_10,
"ISO-8859-10",
"ISO-8859-10",
- (const char *(*)[])&mbfl_encoding_8859_10_aliases,
+ mbfl_encoding_8859_10_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_8859_10_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c
index 25526263b8..ec5d5348a3 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_13.c
@@ -37,7 +37,7 @@ const mbfl_encoding mbfl_encoding_8859_13 = {
mbfl_no_encoding_8859_13,
"ISO-8859-13",
"ISO-8859-13",
- (const char *(*)[])&mbfl_encoding_8859_13_aliases,
+ mbfl_encoding_8859_13_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_8859_13_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c
index 06a2e4cd98..ac5b9a40d9 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_14.c
@@ -37,7 +37,7 @@ const mbfl_encoding mbfl_encoding_8859_14 = {
mbfl_no_encoding_8859_14,
"ISO-8859-14",
"ISO-8859-14",
- (const char *(*)[])&mbfl_encoding_8859_14_aliases,
+ mbfl_encoding_8859_14_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_8859_14_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c
index 82b40796b8..7d9e21e5c3 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_15.c
@@ -37,7 +37,7 @@ const mbfl_encoding mbfl_encoding_8859_15 = {
mbfl_no_encoding_8859_15,
"ISO-8859-15",
"ISO-8859-15",
- (const char *(*)[])&mbfl_encoding_8859_15_aliases,
+ mbfl_encoding_8859_15_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_8859_15_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.c
index 80f1461364..5c8ae964be 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_16.c
@@ -37,7 +37,7 @@ const mbfl_encoding mbfl_encoding_8859_16 = {
mbfl_no_encoding_8859_16,
"ISO-8859-16",
"ISO-8859-16",
- (const char *(*)[])&mbfl_encoding_8859_16_aliases,
+ mbfl_encoding_8859_16_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_8859_16_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c
index 86044e15d3..deacf0c0f4 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_2.c
@@ -37,7 +37,7 @@ const mbfl_encoding mbfl_encoding_8859_2 = {
mbfl_no_encoding_8859_2,
"ISO-8859-2",
"ISO-8859-2",
- (const char *(*)[])&mbfl_encoding_8859_2_aliases,
+ mbfl_encoding_8859_2_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_8859_2_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c
index 64eb9b5cf9..3b1c0847ea 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_3.c
@@ -37,7 +37,7 @@ const mbfl_encoding mbfl_encoding_8859_3 = {
mbfl_no_encoding_8859_3,
"ISO-8859-3",
"ISO-8859-3",
- (const char *(*)[])&mbfl_encoding_8859_3_aliases,
+ mbfl_encoding_8859_3_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_8859_3_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c
index 12a9f7cb10..263036f27b 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_4.c
@@ -37,7 +37,7 @@ const mbfl_encoding mbfl_encoding_8859_4 = {
mbfl_no_encoding_8859_4,
"ISO-8859-4",
"ISO-8859-4",
- (const char *(*)[])&mbfl_encoding_8859_4_aliases,
+ mbfl_encoding_8859_4_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_8859_4_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c
index 70496d07e7..b9a6132029 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_5.c
@@ -37,7 +37,7 @@ const mbfl_encoding mbfl_encoding_8859_5 = {
mbfl_no_encoding_8859_5,
"ISO-8859-5",
"ISO-8859-5",
- (const char *(*)[])&mbfl_encoding_8859_5_aliases,
+ mbfl_encoding_8859_5_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_8859_5_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c
index 59d981e9c2..c010908689 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_6.c
@@ -37,7 +37,7 @@ const mbfl_encoding mbfl_encoding_8859_6 = {
mbfl_no_encoding_8859_6,
"ISO-8859-6",
"ISO-8859-6",
- (const char *(*)[])&mbfl_encoding_8859_6_aliases,
+ mbfl_encoding_8859_6_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_8859_6_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c
index 73ead533ea..64763dbcfe 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_7.c
@@ -37,7 +37,7 @@ const mbfl_encoding mbfl_encoding_8859_7 = {
mbfl_no_encoding_8859_7,
"ISO-8859-7",
"ISO-8859-7",
- (const char *(*)[])&mbfl_encoding_8859_7_aliases,
+ mbfl_encoding_8859_7_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_8859_7_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c
index 05ca13f330..6e4a7f322b 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_8.c
@@ -37,7 +37,7 @@ const mbfl_encoding mbfl_encoding_8859_8 = {
mbfl_no_encoding_8859_8,
"ISO-8859-8",
"ISO-8859-8",
- (const char *(*)[])&mbfl_encoding_8859_8_aliases,
+ mbfl_encoding_8859_8_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_8859_8_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c
index 074f90bef2..a2b87d1174 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_iso8859_9.c
@@ -37,7 +37,7 @@ const mbfl_encoding mbfl_encoding_8859_9 = {
mbfl_no_encoding_8859_9,
"ISO-8859-9",
"ISO-8859-9",
- (const char *(*)[])&mbfl_encoding_8859_9_aliases,
+ mbfl_encoding_8859_9_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_8859_9_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_koi8r.c b/ext/mbstring/libmbfl/filters/mbfilter_koi8r.c
index 7790be65bb..db00a73c4f 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_koi8r.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_koi8r.c
@@ -39,7 +39,7 @@ const mbfl_encoding mbfl_encoding_koi8r = {
mbfl_no_encoding_koi8r,
"KOI8-R",
"KOI8-R",
- (const char *(*)[])&mbfl_encoding_koi8r_aliases,
+ mbfl_encoding_koi8r_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_koi8r_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_koi8u.c b/ext/mbstring/libmbfl/filters/mbfilter_koi8u.c
index a62a1c596b..54c06d2663 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_koi8u.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_koi8u.c
@@ -36,7 +36,7 @@ const mbfl_encoding mbfl_encoding_koi8u = {
mbfl_no_encoding_koi8u,
"KOI8-U",
"KOI8-U",
- (const char *(*)[])&mbfl_encoding_koi8u_aliases,
+ mbfl_encoding_koi8u_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_koi8u_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_qprint.c b/ext/mbstring/libmbfl/filters/mbfilter_qprint.c
index d42cdca883..8f806def25 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_qprint.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_qprint.c
@@ -37,7 +37,7 @@ const mbfl_encoding mbfl_encoding_qprint = {
mbfl_no_encoding_qprint,
"Quoted-Printable",
"Quoted-Printable",
- (const char *(*)[])&mbfl_encoding_qprint_aliases,
+ mbfl_encoding_qprint_aliases,
NULL,
MBFL_ENCTYPE_GL_UNSAFE,
NULL,
@@ -110,8 +110,7 @@ int mbfl_filt_conv_qprintenc(int c, mbfl_convert_filter *filter)
}
if (s <= 0 || s >= 0x80 || s == 0x3d /* not ASCII or '=' */
- || ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) != 0 &&
- (mbfl_charprop_table[s] & MBFL_CHP_MMHQENC) != 0)) {
+ || ((filter->status & MBFL_QPRINT_STS_MIME_HEADER) && mime_char_needs_qencode[s])) {
/* hex-octet */
CK((*filter->output_function)(0x3d, filter->data)); /* '=' */
n = (s >> 4) & 0xf;
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis.c
index dc5c2e4882..d993c89d7f 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_sjis.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis.c
@@ -63,7 +63,7 @@ const mbfl_encoding mbfl_encoding_sjis = {
mbfl_no_encoding_sjis,
"SJIS",
"Shift_JIS",
- (const char *(*)[])&mbfl_encoding_sjis_aliases,
+ mbfl_encoding_sjis_aliases,
mblen_table_sjis,
MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
&vtbl_sjis_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c
index 04e1d3af17..e611f3f846 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c
@@ -45,7 +45,7 @@ const mbfl_encoding mbfl_encoding_sjis2004 = {
mbfl_no_encoding_sjis2004,
"SJIS-2004",
"Shift_JIS",
- (const char *(*)[])&mbfl_encoding_sjis2004_aliases,
+ mbfl_encoding_sjis2004_aliases,
mblen_table_sjis,
MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
&vtbl_sjis2004_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c
index dc3d3692f4..ff8d01937f 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c
@@ -46,7 +46,7 @@ const mbfl_encoding mbfl_encoding_sjis_mac = {
mbfl_no_encoding_sjis_mac,
"SJIS-mac",
"Shift_JIS",
- (const char *(*)[])&mbfl_encoding_sjis_mac_aliases,
+ mbfl_encoding_sjis_mac_aliases,
mblen_table_sjis,
MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
&vtbl_sjis_mac_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c
index 68084a0e0a..d5015a92a8 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mobile.c
@@ -47,7 +47,7 @@ const mbfl_encoding mbfl_encoding_sjis_docomo = {
mbfl_no_encoding_sjis_docomo,
"SJIS-Mobile#DOCOMO",
"Shift_JIS",
- (const char *(*)[])&mbfl_encoding_sjis_docomo_aliases,
+ mbfl_encoding_sjis_docomo_aliases,
mblen_table_sjis,
MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
&vtbl_sjis_docomo_wchar,
@@ -58,7 +58,7 @@ const mbfl_encoding mbfl_encoding_sjis_kddi = {
mbfl_no_encoding_sjis_kddi,
"SJIS-Mobile#KDDI",
"Shift_JIS",
- (const char *(*)[])&mbfl_encoding_sjis_kddi_aliases,
+ mbfl_encoding_sjis_kddi_aliases,
mblen_table_sjis,
MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
&vtbl_sjis_kddi_wchar,
@@ -69,7 +69,7 @@ const mbfl_encoding mbfl_encoding_sjis_sb = {
mbfl_no_encoding_sjis_sb,
"SJIS-Mobile#SOFTBANK",
"Shift_JIS",
- (const char *(*)[])&mbfl_encoding_sjis_sb_aliases,
+ mbfl_encoding_sjis_sb_aliases,
mblen_table_sjis,
MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
&vtbl_sjis_sb_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.c
index 2535036e23..b3ec28740b 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_open.c
@@ -60,7 +60,7 @@ const mbfl_encoding mbfl_encoding_sjis_open = {
mbfl_no_encoding_sjis_open,
"SJIS-win",
"Shift_JIS",
- (const char *(*)[])&mbfl_encoding_sjis_open_aliases,
+ mbfl_encoding_sjis_open_aliases,
mblen_table_sjis,
MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
&vtbl_sjis_open_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c b/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c
index 68172efbe6..258c564aae 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_ucs2.c
@@ -30,13 +30,15 @@
#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 = {
mbfl_no_encoding_ucs2,
"UCS-2",
"UCS-2",
- (const char *(*)[])&mbfl_encoding_ucs2_aliases,
+ mbfl_encoding_ucs2_aliases,
NULL,
MBFL_ENCTYPE_WCS2BE,
&vtbl_ucs2_wchar,
@@ -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/filters/mbfilter_ucs4.c b/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c
index fcdd20d615..396bae91c5 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_ucs4.c
@@ -36,7 +36,7 @@ const mbfl_encoding mbfl_encoding_ucs4 = {
mbfl_no_encoding_ucs4,
"UCS-4",
"UCS-4",
- (const char *(*)[])&mbfl_encoding_ucs4_aliases,
+ mbfl_encoding_ucs4_aliases,
NULL,
MBFL_ENCTYPE_WCS4BE,
&vtbl_ucs4_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_uhc.c b/ext/mbstring/libmbfl/filters/mbfilter_uhc.c
index 5dc4aa81a9..c86612bac2 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_uhc.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_uhc.c
@@ -59,7 +59,7 @@ const mbfl_encoding mbfl_encoding_uhc = {
mbfl_no_encoding_uhc,
"UHC",
"UHC",
- (const char *(*)[])&mbfl_encoding_uhc_aliases,
+ mbfl_encoding_uhc_aliases,
mblen_table_uhc,
MBFL_ENCTYPE_MBCS,
&vtbl_uhc_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf16.c b/ext/mbstring/libmbfl/filters/mbfilter_utf16.c
index 620e8a76f7..a44ea371b3 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_utf16.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_utf16.c
@@ -30,13 +30,17 @@
#include "mbfilter.h"
#include "mbfilter_utf16.h"
+static int mbfl_filt_ident_utf16(int c, mbfl_identify_filter *filter);
+static int mbfl_filt_ident_utf16le(int c, mbfl_identify_filter *filter);
+static int mbfl_filt_ident_utf16be(int c, mbfl_identify_filter *filter);
+
static const char *mbfl_encoding_utf16_aliases[] = {"utf16", NULL};
const mbfl_encoding mbfl_encoding_utf16 = {
mbfl_no_encoding_utf16,
"UTF-16",
"UTF-16",
- (const char *(*)[])&mbfl_encoding_utf16_aliases,
+ mbfl_encoding_utf16_aliases,
NULL,
MBFL_ENCTYPE_MWC2BE,
&vtbl_utf16_wchar,
@@ -65,6 +69,24 @@ const mbfl_encoding mbfl_encoding_utf16le = {
&vtbl_wchar_utf16le
};
+const struct mbfl_identify_vtbl vtbl_identify_utf16 = {
+ mbfl_no_encoding_utf16,
+ mbfl_filt_ident_common_ctor,
+ mbfl_filt_ident_utf16
+};
+
+const struct mbfl_identify_vtbl vtbl_identify_utf16le = {
+ mbfl_no_encoding_utf16le,
+ mbfl_filt_ident_common_ctor,
+ mbfl_filt_ident_utf16le
+};
+
+const struct mbfl_identify_vtbl vtbl_identify_utf16be = {
+ mbfl_no_encoding_utf16be,
+ mbfl_filt_ident_common_ctor,
+ mbfl_filt_ident_utf16be
+};
+
const struct mbfl_convert_vtbl vtbl_utf16_wchar = {
mbfl_no_encoding_utf16,
mbfl_no_encoding_wchar,
@@ -258,35 +280,40 @@ int mbfl_filt_conv_wchar_utf16be(int c, mbfl_convert_filter *filter)
*/
int mbfl_filt_conv_utf16le_wchar(int c, mbfl_convert_filter *filter)
{
- int n;
-
switch (filter->status) {
case 0:
+ filter->cache = c & 0xff;
filter->status = 1;
- n = c & 0xff;
- filter->cache |= n;
break;
- default:
- filter->status = 0;
- n = (filter->cache & 0xff) | ((c & 0xff) << 8);
- if (n >= 0xd800 && n < 0xdc00) {
- filter->cache = ((n & 0x3ff) << 16) + 0x400000;
- } else if (n >= 0xdc00 && n < 0xe000) {
- n &= 0x3ff;
- n |= (filter->cache & 0xfff0000) >> 6;
- filter->cache = 0;
- if (n >= MBFL_WCSPLANE_SUPMIN && n < MBFL_WCSPLANE_SUPMAX) {
- CK((*filter->output_function)(n, filter->data));
- } else { /* illegal character */
- n &= MBFL_WCSGROUP_MASK;
- n |= MBFL_WCSGROUP_THROUGH;
- CK((*filter->output_function)(n, filter->data));
- }
- } else {
- filter->cache = 0;
+
+ case 1:
+ if ((c & 0xfc) == 0xd8) {
+ /* Looks like we have a surrogate pair here */
+ filter->cache += ((c & 0x3) << 8);
+ filter->status = 2;
+ } else if ((c & 0xfc) == 0xdc) {
+ /* This is wrong; the second part of the surrogate pair has come first
+ * Flag it with `MBFL_WCSGROUP_THROUGH`; the following filter will handle
+ * the error */
+ int n = (filter->cache + ((c & 0xff) << 8)) | MBFL_WCSGROUP_THROUGH;
+ filter->status = 0;
CK((*filter->output_function)(n, filter->data));
+ } else {
+ filter->status = 0;
+ CK((*filter->output_function)(filter->cache + ((c & 0xff) << 8), filter->data));
}
break;
+
+ case 2:
+ filter->cache = (filter->cache << 10) + (c & 0xff);
+ filter->status = 3;
+ break;
+
+ case 3:
+ filter->status = 0;
+ int n = filter->cache + ((c & 0x3) << 8) + 0x10000;
+ CK((*filter->output_function)(n, filter->data));
+ break;
}
return c;
@@ -315,3 +342,108 @@ int mbfl_filt_conv_wchar_utf16le(int c, mbfl_convert_filter *filter)
return c;
}
+
+static int mbfl_filt_ident_utf16(int c, mbfl_identify_filter *filter)
+{
+ if (filter->status == 0) {
+ if (c >= 0xfe) { /* could be a byte-order mark */
+ filter->status = c;
+ } else {
+ /* no byte-order mark at beginning of input; assume UTF-16BE */
+ filter->filter_function = mbfl_filt_ident_utf16be;
+ return (filter->filter_function)(c, filter);
+ }
+ } else {
+ unsigned short n = (filter->status << 8) | c;
+ filter->status = 0;
+
+ if (n == 0xfeff) {
+ /* it was a big-endian byte-order mark */
+ filter->filter_function = mbfl_filt_ident_utf16be;
+ } else if (n == 0xfffe) {
+ /* it was a little-endian byte-order mark */
+ filter->filter_function = mbfl_filt_ident_utf16le;
+ } else {
+ /* it wasn't a byte-order mark */
+ filter->filter_function = mbfl_filt_ident_utf16be;
+ (filter->filter_function)(n >> 8, filter);
+ return (filter->filter_function)(c, filter);
+ }
+ }
+ return c;
+}
+
+static int mbfl_filt_ident_utf16le(int c, mbfl_identify_filter *filter)
+{
+ switch (filter->status) {
+ case 0: /* 1st byte */
+ filter->status = 1;
+ break;
+
+ case 1: /* 2nd byte */
+ if ((c & 0xfc) == 0xd8) {
+ /* Looks like a surrogate pair */
+ filter->status = 2;
+ } else if ((c & 0xfc) == 0xdc) {
+ /* This is wrong; the second part of the surrogate pair has come first */
+ filter->flag = 1;
+ } else {
+ filter->status = 0; /* Just an ordinary 2-byte character */
+ }
+ break;
+
+ case 2: /* 3rd byte */
+ filter->status = 3;
+ break;
+
+ case 3: /* 4th byte */
+ if ((c & 0xfc) == 0xdc) {
+ filter->status = 0;
+ } else {
+ filter->flag = 1; /* Surrogate pair wrongly encoded */
+ }
+ break;
+ }
+
+ return c;
+}
+
+static int mbfl_filt_ident_utf16be(int c, mbfl_identify_filter *filter)
+{
+ switch (filter->status) {
+ case 0: /* 1st byte */
+ if ((c & 0xfc) == 0xd8) {
+ /* Looks like a surrogate pair */
+ filter->status = 2;
+ } else if ((c & 0xfc) == 0xdc) {
+ /* This is wrong; the second part of the surrogate pair has come first */
+ filter->flag = 1;
+ } else {
+ /* Just an ordinary 2-byte character */
+ filter->status = 1;
+ }
+ break;
+
+ case 1: /* 2nd byte, not surrogate pair */
+ filter->status = 0;
+ break;
+
+ case 2: /* 2nd byte, surrogate pair */
+ filter->status = 3;
+ break;
+
+ case 3: /* 3rd byte, surrogate pair */
+ if ((c & 0xfc) == 0xdc) {
+ filter->status = 4;
+ } else {
+ filter->flag = 1; /* Surrogate pair wrongly encoded */
+ }
+ break;
+
+ case 4: /* 4th byte, surrogate pair */
+ filter->status = 0;
+ break;
+ }
+
+ return c;
+}
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf16.h b/ext/mbstring/libmbfl/filters/mbfilter_utf16.h
index 4aa88619c7..601779add4 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_utf16.h
+++ b/ext/mbstring/libmbfl/filters/mbfilter_utf16.h
@@ -33,6 +33,9 @@
extern const mbfl_encoding mbfl_encoding_utf16;
extern const mbfl_encoding mbfl_encoding_utf16be;
extern const mbfl_encoding mbfl_encoding_utf16le;
+extern const struct mbfl_identify_vtbl vtbl_identify_utf16;
+extern const struct mbfl_identify_vtbl vtbl_identify_utf16le;
+extern const struct mbfl_identify_vtbl vtbl_identify_utf16be;
extern const struct mbfl_convert_vtbl vtbl_utf16_wchar;
extern const struct mbfl_convert_vtbl vtbl_wchar_utf16;
extern const struct mbfl_convert_vtbl vtbl_utf16be_wchar;
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf32.c b/ext/mbstring/libmbfl/filters/mbfilter_utf32.c
index b936ab4102..2566ff5476 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_utf32.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_utf32.c
@@ -36,7 +36,7 @@ const mbfl_encoding mbfl_encoding_utf32 = {
mbfl_no_encoding_utf32,
"UTF-32",
"UTF-32",
- (const char *(*)[])&mbfl_encoding_utf32_aliases,
+ mbfl_encoding_utf32_aliases,
NULL,
MBFL_ENCTYPE_WCS4BE,
&vtbl_utf32_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf7.c b/ext/mbstring/libmbfl/filters/mbfilter_utf7.c
index b54bcf2b9c..ed931a8b1f 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_utf7.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_utf7.c
@@ -51,7 +51,7 @@ const mbfl_encoding mbfl_encoding_utf7 = {
mbfl_no_encoding_utf7,
"UTF-7",
"UTF-7",
- (const char *(*)[])&mbfl_encoding_utf7_aliases,
+ mbfl_encoding_utf7_aliases,
NULL,
MBFL_ENCTYPE_MBCS | MBFL_ENCTYPE_GL_UNSAFE,
&vtbl_utf7_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c b/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c
index c8fe70fc7f..4c1cd8712f 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c
@@ -27,14 +27,64 @@
*
*/
+/* Modified UTF-7 used for 'international mailbox names' in the IMAP protocol
+ * Also known as mUTF-7
+ * Defined in RFC 3501 5.1.3 (https://tools.ietf.org/html/rfc3501)
+ *
+ * Quoting from the RFC:
+ *
+ ***********************************************************************
+ * In modified UTF-7, printable US-ASCII characters, except for "&",
+ * represent themselves; that is, characters with octet values 0x20-0x25
+ * and 0x27-0x7e. The character "&" (0x26) is represented by the
+ * two-octet sequence "&-".
+ *
+ * All other characters (octet values 0x00-0x1f and 0x7f-0xff) are
+ * represented in modified BASE64, with a further modification from
+ * UTF-7 that "," is used instead of "/". Modified BASE64 MUST NOT be
+ * used to represent any printing US-ASCII character which can represent
+ * itself.
+ *
+ * "&" is used to shift to modified BASE64 and "-" to shift back to
+ * US-ASCII. There is no implicit shift from BASE64 to US-ASCII, and
+ * null shifts ("-&" while in BASE64; note that "&-" while in US-ASCII
+ * means "&") are not permitted. However, all names start in US-ASCII,
+ * and MUST end in US-ASCII; that is, a name that ends with a non-ASCII
+ * ISO-10646 character MUST end with a "-").
+ ***********************************************************************
+ *
+ * The purpose of all this is: 1) to keep all parts of IMAP messages 7-bit clean,
+ * 2) to avoid giving special treatment to +, /, \, and ~, since these are
+ * commonly used in mailbox names, and 3) to ensure there is only one
+ * representation of any mailbox name (vanilla UTF-7 does allow multiple
+ * representations of the same string, by Base64-encoding characters which
+ * could have been included as ASCII literals.)
+ *
+ * RFC 2152 also applies, since it defines vanilla UTF-7 (minus IMAP modifications)
+ * The following paragraph is notable:
+ *
+ ***********************************************************************
+ * Unicode is encoded using Modified Base64 by first converting Unicode
+ * 16-bit quantities to an octet stream (with the most significant octet first).
+ * Surrogate pairs (UTF-16) are converted by treating each half of the pair as
+ * a separate 16 bit quantity (i.e., no special treatment). Text with an odd
+ * number of octets is ill-formed. ISO 10646 characters outside the range
+ * addressable via surrogate pairs cannot be encoded.
+ ***********************************************************************
+ *
+ * So after reversing the modified Base64 encoding on an encoded section,
+ * the contents are interpreted as UTF-16BE. */
+
#include "mbfilter.h"
#include "mbfilter_utf7imap.h"
+static const char *mbfl_encoding_utf7imap_aliases[] = {"mUTF-7", NULL};
+
const mbfl_encoding mbfl_encoding_utf7imap = {
mbfl_no_encoding_utf7imap,
"UTF7-IMAP",
NULL,
- NULL,
+ mbfl_encoding_utf7imap_aliases,
NULL,
MBFL_ENCTYPE_MBCS,
&vtbl_utf7imap_wchar,
@@ -106,7 +156,7 @@ int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter)
case 0:
if (c == 0x26) { /* '&' shift character */
filter->status++;
- } else if (c >= 0 && c < 0x80) { /* ASCII */
+ } else if (c >= 0x20 && c <= 0x7E) { /* ASCII */
CK((*filter->output_function)(c, filter->data));
} else { /* illegal character */
s = c & MBFL_WCSGROUP_MASK;
@@ -145,7 +195,15 @@ int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter)
}
} else {
filter->cache = n;
- CK((*filter->output_function)(s, filter->data));
+ /* Characters which can be expressed as literal, ASCII characters
+ * should not be Base64-encoded */
+ if (s < 0x20 || s > 0x7E || s == '&') {
+ CK((*filter->output_function)(s, filter->data));
+ } else {
+ s &= MBFL_WCSGROUP_MASK;
+ s |= MBFL_WCSGROUP_THROUGH;
+ CK((*filter->output_function)(s, filter->data));
+ }
}
break;
@@ -177,7 +235,15 @@ int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter)
}
} else {
filter->cache = n;
- CK((*filter->output_function)(s, filter->data));
+ /* Characters which can be expressed as literal, ASCII characters
+ * should not be Base64-encoded */
+ if (s < 0x20 || s > 0x7E || s == '&') {
+ CK((*filter->output_function)(s, filter->data));
+ } else {
+ s &= MBFL_WCSGROUP_MASK;
+ s |= MBFL_WCSGROUP_THROUGH;
+ CK((*filter->output_function)(s, filter->data));
+ }
}
break;
@@ -204,7 +270,15 @@ int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter)
}
} else {
filter->cache = 0;
- CK((*filter->output_function)(s, filter->data));
+ /* Characters which can be expressed as literal, ASCII characters
+ * should not be Base64-encoded */
+ if (s < 0x20 || s > 0x7E || s == '&') {
+ CK((*filter->output_function)(s, filter->data));
+ } else {
+ s &= MBFL_WCSGROUP_MASK;
+ s |= MBFL_WCSGROUP_THROUGH;
+ CK((*filter->output_function)(s, filter->data));
+ }
}
break;
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf8.c b/ext/mbstring/libmbfl/filters/mbfilter_utf8.c
index 9e97d5b069..3b7a76de47 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_utf8.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_utf8.c
@@ -57,7 +57,7 @@ const mbfl_encoding mbfl_encoding_utf8 = {
mbfl_no_encoding_utf8,
"UTF-8",
"UTF-8",
- (const char *(*)[])&mbfl_encoding_utf8_aliases,
+ mbfl_encoding_utf8_aliases,
mblen_table_utf8,
MBFL_ENCTYPE_MBCS,
&vtbl_utf8_wchar,
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c b/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c
index ef8d4cc075..8f50d22781 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_utf8_mobile.c
@@ -46,7 +46,7 @@ const mbfl_encoding mbfl_encoding_utf8_docomo = {
mbfl_no_encoding_utf8_docomo,
"UTF-8-Mobile#DOCOMO",
"UTF-8",
- (const char *(*)[])&mbfl_encoding_utf8_docomo_aliases,
+ mbfl_encoding_utf8_docomo_aliases,
mblen_table_utf8,
MBFL_ENCTYPE_MBCS,
&vtbl_utf8_docomo_wchar,
@@ -57,7 +57,7 @@ const mbfl_encoding mbfl_encoding_utf8_kddi_a = {
mbfl_no_encoding_utf8_kddi_a,
"UTF-8-Mobile#KDDI-A",
"UTF-8",
- (const char *(*)[])&mbfl_encoding_utf8_kddi_a_aliases,
+ mbfl_encoding_utf8_kddi_a_aliases,
mblen_table_utf8,
MBFL_ENCTYPE_MBCS,
&vtbl_utf8_kddi_a_wchar,
@@ -68,7 +68,7 @@ const mbfl_encoding mbfl_encoding_utf8_kddi_b = {
mbfl_no_encoding_utf8_kddi_b,
"UTF-8-Mobile#KDDI-B",
"UTF-8",
- (const char *(*)[])&mbfl_encoding_utf8_kddi_b_aliases,
+ mbfl_encoding_utf8_kddi_b_aliases,
mblen_table_utf8,
MBFL_ENCTYPE_MBCS,
&vtbl_utf8_kddi_b_wchar,
@@ -79,7 +79,7 @@ const mbfl_encoding mbfl_encoding_utf8_sb = {
mbfl_no_encoding_utf8_sb,
"UTF-8-Mobile#SOFTBANK",
"UTF-8",
- (const char *(*)[])&mbfl_encoding_utf8_sb_aliases,
+ mbfl_encoding_utf8_sb_aliases,
mblen_table_utf8,
MBFL_ENCTYPE_MBCS,
&vtbl_utf8_sb_wchar,
diff --git a/ext/mbstring/libmbfl/filters/unicode_prop.h b/ext/mbstring/libmbfl/filters/unicode_prop.h
index 6eaefbc2e3..1ecf42c556 100644
--- a/ext/mbstring/libmbfl/filters/unicode_prop.h
+++ b/ext/mbstring/libmbfl/filters/unicode_prop.h
@@ -19,148 +19,136 @@
* Suite 330, Boston, MA 02111-1307 USA
*
* The authors of this file: PHP3 Internationalization team
- *
- */
-
-/* character property table */
-#define MBFL_CHP_CTL 0x01
-#define MBFL_CHP_DIGIT 0x02
-#define MBFL_CHP_UALPHA 0x04
-#define MBFL_CHP_LALPHA 0x08
-#define MBFL_CHP_MMHQENC 0x10 /* must Q-encoding in MIME Header encoded-word */
-#define MBFL_CHP_MSPECIAL 0x20 /* RFC822 Special characters */
-
-/*
- * Unicode table
*/
-static const unsigned char mbfl_charprop_table[] = {
-/* NUL 0 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC,
-/* SCH 1 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SIX 2 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* EIX 3 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* EOT 4 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* ENQ 5 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* ACK 6 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* BEL 7 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* BS 8 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* HI 9 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* LF 10 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* VI 11 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* FF 12 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* CR 13 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SO 14 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SI 15 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SLE 16 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* CSI 17 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* DC2 18 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* DC3 19 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* DC4 20 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* NAK 21 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SYN 22 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* EIB 23 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* CAN 24 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* EM 25 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SLB 26 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* ESC 27 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* FS 28 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* GS 29 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* RS 30 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* US 31 */ MBFL_CHP_CTL | MBFL_CHP_MMHQENC ,
-/* SP 32 */ MBFL_CHP_MMHQENC ,
-/* ! 33 */ 0 ,
-/* " 34 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* # 35 */ MBFL_CHP_MMHQENC ,
-/* $ 36 */ MBFL_CHP_MMHQENC ,
-/* % 37 */ MBFL_CHP_MMHQENC ,
-/* & 38 */ MBFL_CHP_MMHQENC ,
-/* ' 39 */ MBFL_CHP_MMHQENC ,
-/* ( 40 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* ) 41 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* * 42 */ 0 ,
-/* + 43 */ 0 ,
-/* , 44 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* - 45 */ 0 ,
-/* . 46 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* / 47 */ 0 ,
-/* 0 48 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 1 49 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 2 50 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 3 51 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 4 52 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 5 53 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 6 54 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 7 55 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 8 56 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* 9 57 */ MBFL_CHP_DIGIT | MBFL_CHP_MMHQENC ,
-/* : 58 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* ; 59 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* < 60 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* = 61 */ 0 ,
-/* > 62 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* ? 63 */ MBFL_CHP_MMHQENC ,
-/* @ 64 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* A 65 */ MBFL_CHP_UALPHA ,
-/* B 66 */ MBFL_CHP_UALPHA ,
-/* C 67 */ MBFL_CHP_UALPHA ,
-/* D 68 */ MBFL_CHP_UALPHA ,
-/* E 69 */ MBFL_CHP_UALPHA ,
-/* F 70 */ MBFL_CHP_UALPHA ,
-/* G 71 */ MBFL_CHP_UALPHA ,
-/* H 72 */ MBFL_CHP_UALPHA ,
-/* I 73 */ MBFL_CHP_UALPHA ,
-/* J 74 */ MBFL_CHP_UALPHA ,
-/* K 75 */ MBFL_CHP_UALPHA ,
-/* L 76 */ MBFL_CHP_UALPHA ,
-/* M 77 */ MBFL_CHP_UALPHA ,
-/* N 78 */ MBFL_CHP_UALPHA ,
-/* O 79 */ MBFL_CHP_UALPHA ,
-/* P 80 */ MBFL_CHP_UALPHA ,
-/* Q 81 */ MBFL_CHP_UALPHA ,
-/* R 82 */ MBFL_CHP_UALPHA ,
-/* S 83 */ MBFL_CHP_UALPHA ,
-/* T 84 */ MBFL_CHP_UALPHA ,
-/* U 85 */ MBFL_CHP_UALPHA ,
-/* V 86 */ MBFL_CHP_UALPHA ,
-/* W 87 */ MBFL_CHP_UALPHA ,
-/* X 88 */ MBFL_CHP_UALPHA ,
-/* Y 89 */ MBFL_CHP_UALPHA ,
-/* Z 90 */ MBFL_CHP_UALPHA ,
-/* [ 91 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* \ 92 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* ] 93 */ MBFL_CHP_MMHQENC | MBFL_CHP_MSPECIAL ,
-/* ^ 94 */ MBFL_CHP_MMHQENC ,
-/* _ 95 */ MBFL_CHP_MMHQENC ,
-/* ` 96 */ MBFL_CHP_MMHQENC ,
-/* a 97 */ MBFL_CHP_LALPHA ,
-/* b 98 */ MBFL_CHP_LALPHA ,
-/* c 99 */ MBFL_CHP_LALPHA ,
-/* d 100 */ MBFL_CHP_LALPHA ,
-/* e 101 */ MBFL_CHP_LALPHA ,
-/* f 102 */ MBFL_CHP_LALPHA ,
-/* g 103 */ MBFL_CHP_LALPHA ,
-/* h 104 */ MBFL_CHP_LALPHA ,
-/* i 105 */ MBFL_CHP_LALPHA ,
-/* j 106 */ MBFL_CHP_LALPHA ,
-/* k 107 */ MBFL_CHP_LALPHA ,
-/* l 108 */ MBFL_CHP_LALPHA ,
-/* m 109 */ MBFL_CHP_LALPHA ,
-/* n 110 */ MBFL_CHP_LALPHA ,
-/* o 111 */ MBFL_CHP_LALPHA ,
-/* p 112 */ MBFL_CHP_LALPHA ,
-/* q 113 */ MBFL_CHP_LALPHA ,
-/* r 114 */ MBFL_CHP_LALPHA ,
-/* s 115 */ MBFL_CHP_LALPHA ,
-/* t 116 */ MBFL_CHP_LALPHA ,
-/* u 117 */ MBFL_CHP_LALPHA ,
-/* v 118 */ MBFL_CHP_LALPHA ,
-/* w 119 */ MBFL_CHP_LALPHA ,
-/* x 120 */ MBFL_CHP_LALPHA ,
-/* y 121 */ MBFL_CHP_LALPHA ,
-/* z 122 */ MBFL_CHP_LALPHA ,
-/* { 123 */ MBFL_CHP_MMHQENC ,
-/* | 124 */ MBFL_CHP_MMHQENC ,
-/* } 125 */ MBFL_CHP_MMHQENC ,
-/* ~ 126 */ MBFL_CHP_MMHQENC ,
-/* DEL 127 */ MBFL_CHP_MMHQENC
+/* Should we use QPrint-encoding in MIME Header encoded-word? */
+static const unsigned char mime_char_needs_qencode[] = {
+/* NUL 0 */ 1,
+/* SCH 1 */ 1,
+/* SIX 2 */ 1,
+/* EIX 3 */ 1,
+/* EOT 4 */ 1,
+/* ENQ 5 */ 1,
+/* ACK 6 */ 1,
+/* BEL 7 */ 1,
+/* BS 8 */ 1,
+/* HI 9 */ 1,
+/* LF 10 */ 1,
+/* VI 11 */ 1,
+/* FF 12 */ 1,
+/* CR 13 */ 1,
+/* SO 14 */ 1,
+/* SI 15 */ 1,
+/* SLE 16 */ 1,
+/* CSI 17 */ 1,
+/* DC2 18 */ 1,
+/* DC3 19 */ 1,
+/* DC4 20 */ 1,
+/* NAK 21 */ 1,
+/* SYN 22 */ 1,
+/* EIB 23 */ 1,
+/* CAN 24 */ 1,
+/* EM 25 */ 1,
+/* SLB 26 */ 1,
+/* ESC 27 */ 1,
+/* FS 28 */ 1,
+/* GS 29 */ 1,
+/* RS 30 */ 1,
+/* US 31 */ 1,
+/* SP 32 */ 1,
+/* ! 33 */ 0,
+/* " 34 */ 1,
+/* # 35 */ 1,
+/* $ 36 */ 1,
+/* % 37 */ 1,
+/* & 38 */ 1,
+/* ' 39 */ 1,
+/* ( 40 */ 1,
+/* ) 41 */ 1,
+/* * 42 */ 0,
+/* + 43 */ 0,
+/* , 44 */ 1,
+/* - 45 */ 0,
+/* . 46 */ 1,
+/* / 47 */ 0,
+/* 0 48 */ 1,
+/* 1 49 */ 1,
+/* 2 50 */ 1,
+/* 3 51 */ 1,
+/* 4 52 */ 1,
+/* 5 53 */ 1,
+/* 6 54 */ 1,
+/* 7 55 */ 1,
+/* 8 56 */ 1,
+/* 9 57 */ 1,
+/* : 58 */ 1,
+/* ; 59 */ 1,
+/* < 60 */ 1,
+/* = 61 */ 0,
+/* > 62 */ 1,
+/* ? 63 */ 1,
+/* @ 64 */ 1,
+/* A 65 */ 0,
+/* B 66 */ 0,
+/* C 67 */ 0,
+/* D 68 */ 0,
+/* E 69 */ 0,
+/* F 70 */ 0,
+/* G 71 */ 0,
+/* H 72 */ 0,
+/* I 73 */ 0,
+/* J 74 */ 0,
+/* K 75 */ 0,
+/* L 76 */ 0,
+/* M 77 */ 0,
+/* N 78 */ 0,
+/* O 79 */ 0,
+/* P 80 */ 0,
+/* Q 81 */ 0,
+/* R 82 */ 0,
+/* S 83 */ 0,
+/* T 84 */ 0,
+/* U 85 */ 0,
+/* V 86 */ 0,
+/* W 87 */ 0,
+/* X 88 */ 0,
+/* Y 89 */ 0,
+/* Z 90 */ 0,
+/* [ 91 */ 1,
+/* \ 92 */ 1,
+/* ] 93 */ 1,
+/* ^ 94 */ 1,
+/* _ 95 */ 1,
+/* ` 96 */ 1,
+/* a 97 */ 0,
+/* b 98 */ 0,
+/* c 99 */ 0,
+/* d 100 */ 0,
+/* e 101 */ 0,
+/* f 102 */ 0,
+/* g 103 */ 0,
+/* h 104 */ 0,
+/* i 105 */ 0,
+/* j 106 */ 0,
+/* k 107 */ 0,
+/* l 108 */ 0,
+/* m 109 */ 0,
+/* n 110 */ 0,
+/* o 111 */ 0,
+/* p 112 */ 0,
+/* q 113 */ 0,
+/* r 114 */ 0,
+/* s 115 */ 0,
+/* t 116 */ 0,
+/* u 117 */ 0,
+/* v 118 */ 0,
+/* w 119 */ 0,
+/* x 120 */ 0,
+/* y 121 */ 0,
+/* z 122 */ 0,
+/* { 123 */ 1,
+/* | 124 */ 1,
+/* } 125 */ 1,
+/* ~ 126 */ 1,
+/* DEL 127 */ 1
};
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter.c b/ext/mbstring/libmbfl/mbfl/mbfilter.c
index 793dd8e078..d0e5494387 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfilter.c
+++ b/ext/mbstring/libmbfl/mbfl/mbfilter.c
@@ -396,18 +396,6 @@ const mbfl_encoding *mbfl_encoding_detector_judge(mbfl_encoding_detector *identd
}
n--;
}
-
- /* fallback judge */
- if (!encoding) {
- n = identd->filter_list_size - 1;
- while (n >= 0) {
- filter = identd->filter_list[n];
- if (!filter->flag) {
- encoding = filter->encoding;
- }
- n--;
- }
- }
}
return encoding;
@@ -486,7 +474,7 @@ mbfl_convert_encoding(
const mbfl_encoding *
mbfl_identify_encoding(mbfl_string *string, const mbfl_encoding **elist, int elistsz, int strict)
{
- int i, num, bad;
+ int i, bad;
size_t n;
unsigned char *p;
mbfl_identify_filter *flist, *filter;
@@ -495,12 +483,9 @@ mbfl_identify_encoding(mbfl_string *string, const mbfl_encoding **elist, int eli
/* flist is an array of mbfl_identify_filter instances */
flist = ecalloc(elistsz, sizeof(mbfl_identify_filter));
- num = 0;
if (elist != NULL) {
for (i = 0; i < elistsz; i++) {
- if (!mbfl_identify_filter_init2(&flist[num], elist[i])) {
- num++;
- }
+ mbfl_identify_filter_init2(&flist[i], elist[i]);
}
}
@@ -511,7 +496,7 @@ mbfl_identify_encoding(mbfl_string *string, const mbfl_encoding **elist, int eli
if (p != NULL) {
bad = 0;
while (n > 0) {
- for (i = 0; i < num; i++) {
+ for (i = 0; i < elistsz; i++) {
filter = &flist[i];
if (!filter->flag) {
(*filter->filter_function)(*p, filter);
@@ -520,7 +505,7 @@ mbfl_identify_encoding(mbfl_string *string, const mbfl_encoding **elist, int eli
}
}
}
- if ((num - 1) <= bad && !strict) {
+ if ((elistsz - 1) <= bad && !strict) {
break;
}
p++;
@@ -531,7 +516,7 @@ mbfl_identify_encoding(mbfl_string *string, const mbfl_encoding **elist, int eli
/* judge */
encoding = NULL;
- for (i = 0; i < num; i++) {
+ for (i = 0; i < elistsz; i++) {
filter = &flist[i];
if (!filter->flag) {
if (strict && filter->status) {
@@ -544,7 +529,7 @@ mbfl_identify_encoding(mbfl_string *string, const mbfl_encoding **elist, int eli
/* fall-back judge */
if (!encoding) {
- for (i = 0; i < num; i++) {
+ for (i = 0; i < elistsz; i++) {
filter = &flist[i];
if (!filter->flag && (!strict || !filter->status)) {
encoding = filter->encoding;
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c b/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c
index f4c74946c1..41081aa883 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c
+++ b/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.c
@@ -43,13 +43,19 @@ const mbfl_encoding mbfl_encoding_8bit = {
mbfl_no_encoding_8bit,
"8bit",
"8bit",
- (const char *(*)[])&mbfl_encoding_8bit_aliases,
+ mbfl_encoding_8bit_aliases,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_8bit_wchar,
&vtbl_wchar_8bit
};
+const struct mbfl_identify_vtbl vtbl_identify_8bit = {
+ mbfl_no_encoding_8bit,
+ mbfl_filt_ident_common_ctor,
+ mbfl_filt_ident_true
+};
+
const struct mbfl_convert_vtbl vtbl_8bit_wchar = {
mbfl_no_encoding_8bit,
mbfl_no_encoding_wchar,
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h b/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h
index acdf640fd7..64369b999d 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h
+++ b/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h
@@ -35,5 +35,6 @@
#include "mbfilter.h"
MBFLAPI extern const mbfl_encoding mbfl_encoding_8bit;
+extern const struct mbfl_identify_vtbl vtbl_identify_8bit;
#endif /* MBFL_MBFILTER_8BIT_H */
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_pass.c b/ext/mbstring/libmbfl/mbfl/mbfilter_pass.c
index 3d7cffe9c1..e43f746ecc 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfilter_pass.c
+++ b/ext/mbstring/libmbfl/mbfl/mbfilter_pass.c
@@ -38,7 +38,7 @@ const mbfl_encoding mbfl_encoding_pass = {
mbfl_no_encoding_pass,
"pass",
NULL,
- (const char *(*)[])&mbfl_encoding_pass_aliases,
+ mbfl_encoding_pass_aliases,
NULL,
0,
NULL,
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c
index 6a46c2b541..af6a3bba93 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c
+++ b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c
@@ -136,7 +136,7 @@ static void mbfl_convert_filter_common_init(mbfl_convert_filter *filter, const m
filter->filter_ctor = vtbl->filter_ctor;
filter->filter_dtor = vtbl->filter_dtor;
filter->filter_function = vtbl->filter_function;
- filter->filter_flush = vtbl->filter_flush;
+ filter->filter_flush = (filter_flush_t)vtbl->filter_flush;
filter->filter_copy = vtbl->filter_copy;
(*filter->filter_ctor)(filter);
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c b/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c
index 3ecb06553d..f740f7aec1 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c
+++ b/ext/mbstring/libmbfl/mbfl/mbfl_encoding.c
@@ -199,44 +199,32 @@ static const mbfl_encoding *mbfl_encoding_ptr_list[] = {
NULL
};
-/* encoding resolver */
-const mbfl_encoding *
-mbfl_name2encoding(const char *name)
+const mbfl_encoding *mbfl_name2encoding(const char *name)
{
- const mbfl_encoding *encoding;
- int i, j;
+ const mbfl_encoding **encoding;
- if (name == NULL) {
- return NULL;
- }
-
- i = 0;
- while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL){
- if (strcasecmp(encoding->name, name) == 0) {
- return encoding;
+ for (encoding = mbfl_encoding_ptr_list; *encoding; encoding++) {
+ if (strcasecmp((*encoding)->name, name) == 0) {
+ return *encoding;
}
}
- /* serch MIME charset name */
- i = 0;
- while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL) {
- if (encoding->mime_name != NULL) {
- if (strcasecmp(encoding->mime_name, name) == 0) {
- return encoding;
+ /* search MIME charset name */
+ for (encoding = mbfl_encoding_ptr_list; *encoding; encoding++) {
+ if ((*encoding)->mime_name) {
+ if (strcasecmp((*encoding)->mime_name, name) == 0) {
+ return *encoding;
}
}
}
- /* serch aliases */
- i = 0;
- while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL) {
- if (encoding->aliases != NULL) {
- j = 0;
- while ((*encoding->aliases)[j] != NULL) {
- if (strcasecmp((*encoding->aliases)[j], name) == 0) {
- return encoding;
+ /* search aliases */
+ for (encoding = mbfl_encoding_ptr_list; *encoding; encoding++) {
+ if ((*encoding)->aliases) {
+ for (const char **alias = (*encoding)->aliases; *alias; alias++) {
+ if (strcasecmp(*alias, name) == 0) {
+ return *encoding;
}
- j++;
}
}
}
@@ -244,63 +232,45 @@ mbfl_name2encoding(const char *name)
return NULL;
}
-const mbfl_encoding *
-mbfl_no2encoding(enum mbfl_no_encoding no_encoding)
+const mbfl_encoding *mbfl_no2encoding(enum mbfl_no_encoding no_encoding)
{
- const mbfl_encoding *encoding;
- int i;
+ const mbfl_encoding **encoding;
- i = 0;
- while ((encoding = mbfl_encoding_ptr_list[i++]) != NULL){
- if (encoding->no_encoding == no_encoding) {
- return encoding;
+ for (encoding = mbfl_encoding_ptr_list; *encoding; encoding++) {
+ if ((*encoding)->no_encoding == no_encoding) {
+ return *encoding;
}
}
return NULL;
}
-enum mbfl_no_encoding
-mbfl_name2no_encoding(const char *name)
+enum mbfl_no_encoding mbfl_name2no_encoding(const char *name)
{
- const mbfl_encoding *encoding;
-
- encoding = mbfl_name2encoding(name);
- if (encoding == NULL) {
- return mbfl_no_encoding_invalid;
- } else {
- return encoding->no_encoding;
- }
+ const mbfl_encoding *encoding = mbfl_name2encoding(name);
+ return encoding ? encoding->no_encoding : mbfl_no_encoding_invalid;
}
-const char *
-mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding)
+const char *mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding)
{
- const mbfl_encoding *encoding;
-
- encoding = mbfl_no2encoding(no_encoding);
- if (encoding == NULL) {
- return "";
- } else {
- return encoding->name;
- }
+ const mbfl_encoding *encoding = mbfl_no2encoding(no_encoding);
+ return encoding ? encoding->name : "";
}
-const mbfl_encoding **
-mbfl_get_supported_encodings(void)
+const mbfl_encoding **mbfl_get_supported_encodings(void)
{
return mbfl_encoding_ptr_list;
}
-const char *
-mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding)
+const char *mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding)
{
- const mbfl_encoding *encoding;
+ return mbfl_encoding_preferred_mime_name(mbfl_no2encoding(no_encoding));
+}
- encoding = mbfl_no2encoding(no_encoding);
- if (encoding != NULL && encoding->mime_name != NULL && encoding->mime_name[0] != '\0') {
+const char *mbfl_encoding_preferred_mime_name(const mbfl_encoding *encoding)
+{
+ if (encoding->mime_name && encoding->mime_name[0] != '\0') {
return encoding->mime_name;
- } else {
- return NULL;
}
+ return NULL;
}
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h b/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h
index 0b39153c9d..f945b5dd03 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h
+++ b/ext/mbstring/libmbfl/mbfl/mbfl_encoding.h
@@ -145,19 +145,19 @@ typedef struct _mbfl_encoding {
enum mbfl_no_encoding no_encoding;
const char *name;
const char *mime_name;
- const char *(*aliases)[];
+ const char **aliases;
const unsigned char *mblen_table;
unsigned int flag;
const struct mbfl_convert_vtbl *input_filter;
const struct mbfl_convert_vtbl *output_filter;
} mbfl_encoding;
-MBFLAPI extern const mbfl_encoding * mbfl_name2encoding(const char *name);
-MBFLAPI extern const mbfl_encoding * mbfl_no2encoding(enum mbfl_no_encoding no_encoding);
+MBFLAPI extern const mbfl_encoding *mbfl_name2encoding(const char *name);
+MBFLAPI extern const mbfl_encoding *mbfl_no2encoding(enum mbfl_no_encoding no_encoding);
MBFLAPI extern enum mbfl_no_encoding mbfl_name2no_encoding(const char *name);
-MBFLAPI extern const mbfl_encoding ** mbfl_get_supported_encodings();
-MBFLAPI extern const char * mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding);
-MBFLAPI extern const char * mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding);
-
+MBFLAPI extern const mbfl_encoding **mbfl_get_supported_encodings();
+MBFLAPI extern const char *mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding);
+MBFLAPI extern const char *mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding);
+MBFLAPI extern const char *mbfl_encoding_preferred_mime_name(const mbfl_encoding *encoding);
#endif /* MBFL_ENCODING_H */
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_ident.c b/ext/mbstring/libmbfl/mbfl/mbfl_ident.c
index 18144eb030..a92d55daa3 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfl_ident.c
+++ b/ext/mbstring/libmbfl/mbfl/mbfl_ident.c
@@ -159,97 +159,79 @@ static const struct mbfl_identify_vtbl *mbfl_identify_filter_list[] = {
&vtbl_identify_cp50221,
&vtbl_identify_cp50222,
&vtbl_identify_gb18030,
+ &vtbl_identify_7bit,
+ &vtbl_identify_utf16,
+ &vtbl_identify_utf16le,
+ &vtbl_identify_utf16be,
+ &vtbl_identify_8bit,
+ &vtbl_identify_ucs2,
+ &vtbl_identify_ucs2be,
+ &vtbl_identify_ucs2le,
&vtbl_identify_false,
NULL
};
-/*
- * identify filter
- */
-const struct mbfl_identify_vtbl * mbfl_identify_filter_get_vtbl(enum mbfl_no_encoding encoding)
+const struct mbfl_identify_vtbl* mbfl_identify_filter_get_vtbl(enum mbfl_no_encoding encoding)
{
- const struct mbfl_identify_vtbl * vtbl;
- int i;
+ const struct mbfl_identify_vtbl** vtbl;
- i = 0;
- while ((vtbl = mbfl_identify_filter_list[i++]) != NULL) {
- if (vtbl->encoding == encoding) {
- break;
+ for (vtbl = mbfl_identify_filter_list; *vtbl; vtbl++) {
+ if ((*vtbl)->encoding == encoding) {
+ return *vtbl;
}
}
- return vtbl;
+ return NULL;
}
mbfl_identify_filter *mbfl_identify_filter_new(enum mbfl_no_encoding encoding)
{
mbfl_identify_filter *filter = emalloc(sizeof(mbfl_identify_filter));
- if (mbfl_identify_filter_init(filter, encoding)) {
- efree(filter);
- return NULL;
- }
-
+ mbfl_identify_filter_init(filter, encoding);
return filter;
}
mbfl_identify_filter *mbfl_identify_filter_new2(const mbfl_encoding *encoding)
{
mbfl_identify_filter *filter = emalloc(sizeof(mbfl_identify_filter));
- if (mbfl_identify_filter_init2(filter, encoding)) {
- efree(filter);
- return NULL;
- }
-
+ mbfl_identify_filter_init2(filter, encoding);
return filter;
}
-
-int mbfl_identify_filter_init(mbfl_identify_filter *filter, enum mbfl_no_encoding encoding)
+void mbfl_identify_filter_init(mbfl_identify_filter *filter, enum mbfl_no_encoding encoding)
{
const mbfl_encoding *enc = mbfl_no2encoding(encoding);
- return mbfl_identify_filter_init2(filter, enc ? enc: &mbfl_encoding_pass);
+ mbfl_identify_filter_init2(filter, enc ? enc : &mbfl_encoding_pass);
}
-int mbfl_identify_filter_init2(mbfl_identify_filter *filter, const mbfl_encoding *encoding)
+void mbfl_identify_filter_init2(mbfl_identify_filter *filter, const mbfl_encoding *encoding)
{
- const struct mbfl_identify_vtbl *vtbl;
-
- /* encoding structure */
filter->encoding = encoding;
-
- filter->status = 0;
- filter->flag = 0;
- filter->score = 0;
+ filter->status = filter->flag = filter->score = 0;
/* setup the function table */
- vtbl = mbfl_identify_filter_get_vtbl(filter->encoding->no_encoding);
+ const struct mbfl_identify_vtbl *vtbl = mbfl_identify_filter_get_vtbl(filter->encoding->no_encoding);
if (vtbl == NULL) {
vtbl = &vtbl_identify_false;
}
filter->filter_ctor = vtbl->filter_ctor;
filter->filter_function = vtbl->filter_function;
- /* constructor */
(*filter->filter_ctor)(filter);
-
- return 0;
}
void mbfl_identify_filter_delete(mbfl_identify_filter *filter)
{
- if (filter == NULL) {
- return;
- }
-
- efree((void*)filter);
+ efree(filter);
}
void mbfl_filt_ident_common_ctor(mbfl_identify_filter *filter)
{
- filter->status = 0;
- filter->flag = 0;
+ filter->status = filter->flag = 0;
}
+/* A (useless) filter which says that _every_ string is invalid in a certain encoding.
+ * Obviously, that cannot be true. Remove after all encodings have proper identify filters */
int mbfl_filt_ident_false(int c, mbfl_identify_filter *filter)
{
filter->flag = 1; /* bad */
@@ -262,6 +244,7 @@ void mbfl_filt_ident_false_ctor(mbfl_identify_filter *filter)
filter->flag = 1;
}
+/* For encodings in which _every_ possible input string is valid */
int mbfl_filt_ident_true(int c, mbfl_identify_filter *filter)
{
return c;
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_ident.h b/ext/mbstring/libmbfl/mbfl/mbfl_ident.h
index c9afd03fb4..39be183ef3 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfl_ident.h
+++ b/ext/mbstring/libmbfl/mbfl/mbfl_ident.h
@@ -58,8 +58,8 @@ MBFLAPI extern const struct mbfl_identify_vtbl * mbfl_identify_filter_get_vtbl(e
MBFLAPI extern mbfl_identify_filter * mbfl_identify_filter_new(enum mbfl_no_encoding encoding);
MBFLAPI extern mbfl_identify_filter * mbfl_identify_filter_new2(const mbfl_encoding *encoding);
MBFLAPI extern void mbfl_identify_filter_delete(mbfl_identify_filter *filter);
-MBFLAPI extern int mbfl_identify_filter_init(mbfl_identify_filter *filter, enum mbfl_no_encoding encoding);
-MBFLAPI extern int mbfl_identify_filter_init2(mbfl_identify_filter *filter, const mbfl_encoding *encoding);
+MBFLAPI extern void mbfl_identify_filter_init(mbfl_identify_filter *filter, enum mbfl_no_encoding encoding);
+MBFLAPI extern void mbfl_identify_filter_init2(mbfl_identify_filter *filter, const mbfl_encoding *encoding);
MBFLAPI extern void mbfl_filt_ident_common_ctor(mbfl_identify_filter *filter);
MBFLAPI extern void mbfl_filt_ident_false_ctor(mbfl_identify_filter *filter);
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c b/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c
index 09746efcd0..cd064e5ee8 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c
+++ b/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.c
@@ -37,106 +37,67 @@
/*
* memory device output functions
*/
-void
-mbfl_memory_device_init(mbfl_memory_device *device, size_t initsz, size_t allocsz)
+void mbfl_memory_device_init(mbfl_memory_device *device, size_t initsz, size_t allocsz)
{
- if (device) {
- device->length = 0;
- device->buffer = NULL;
- if (initsz > 0) {
- device->buffer = emalloc(initsz);
- device->length = initsz;
- }
- device->pos = 0;
- if (allocsz > MBFL_MEMORY_DEVICE_ALLOC_SIZE) {
- device->allocsz = allocsz;
- } else {
- device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE;
- }
- }
+ device->buffer = (initsz > 0) ? emalloc(initsz) : NULL;
+ device->length = initsz;
+ device->pos = 0;
+ device->allocsz = MAX(allocsz, MBFL_MEMORY_DEVICE_ALLOC_SIZE);
}
-void
-mbfl_memory_device_realloc(mbfl_memory_device *device, size_t initsz, size_t allocsz)
+void mbfl_memory_device_realloc(mbfl_memory_device *device, size_t initsz, size_t allocsz)
{
- if (device) {
- if (initsz > device->length) {
- device->buffer = erealloc(device->buffer, initsz);
- device->length = initsz;
- }
- if (allocsz > MBFL_MEMORY_DEVICE_ALLOC_SIZE) {
- device->allocsz = allocsz;
- } else {
- device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE;
- }
+ if (initsz > device->length) {
+ device->buffer = erealloc(device->buffer, initsz);
+ device->length = initsz;
}
+ device->allocsz = MAX(allocsz, MBFL_MEMORY_DEVICE_ALLOC_SIZE);
}
-void
-mbfl_memory_device_clear(mbfl_memory_device *device)
+void mbfl_memory_device_clear(mbfl_memory_device *device)
{
- if (device) {
- if (device->buffer) {
- efree(device->buffer);
- }
- device->buffer = NULL;
- device->length = 0;
- device->pos = 0;
+ if (device->buffer) {
+ efree(device->buffer);
}
+ device->buffer = NULL;
+ device->length = device->pos = 0;
}
-void
-mbfl_memory_device_reset(mbfl_memory_device *device)
+void mbfl_memory_device_reset(mbfl_memory_device *device)
{
- if (device) {
- device->pos = 0;
- }
+ device->pos = 0;
}
-void
-mbfl_memory_device_unput(mbfl_memory_device *device)
+void mbfl_memory_device_unput(mbfl_memory_device *device)
{
if (device->pos > 0) {
device->pos--;
}
}
-mbfl_string *
-mbfl_memory_device_result(mbfl_memory_device *device, mbfl_string *result)
+mbfl_string* mbfl_memory_device_result(mbfl_memory_device *device, mbfl_string *result)
{
- if (device && result) {
- result->len = device->pos;
- mbfl_memory_device_output('\0', device);
- result->val = device->buffer;
- device->buffer = NULL;
- device->length = 0;
- device->pos= 0;
- if (result->val == NULL) {
- result->len = 0;
- result = NULL;
- }
- } else {
- result = NULL;
- }
-
+ result->len = device->pos;
+ mbfl_memory_device_output('\0', device);
+ result->val = device->buffer;
+ device->buffer = NULL;
+ device->length = device->pos = 0;
return result;
}
-int
-mbfl_memory_device_output(int c, void *data)
+int mbfl_memory_device_output(int c, void *data)
{
mbfl_memory_device *device = (mbfl_memory_device *)data;
if (device->pos >= device->length) {
/* reallocate buffer */
- size_t newlen;
if (device->length > SIZE_MAX - device->allocsz) {
/* overflow */
return -1;
}
- newlen = device->length + device->allocsz;
+ size_t newlen = device->length + device->allocsz;
device->buffer = erealloc(device->buffer, newlen);
device->length = newlen;
}
@@ -145,20 +106,15 @@ mbfl_memory_device_output(int c, void *data)
return c;
}
-int
-mbfl_memory_device_strcat(mbfl_memory_device *device, const char *psrc)
+int mbfl_memory_device_strcat(mbfl_memory_device *device, const char *psrc)
{
return mbfl_memory_device_strncat(device, psrc, strlen(psrc));
}
-int
-mbfl_memory_device_strncat(mbfl_memory_device *device, const char *psrc, size_t len)
+int mbfl_memory_device_strncat(mbfl_memory_device *device, const char *psrc, size_t len)
{
- unsigned char *w;
-
if (len > device->length - device->pos) {
/* reallocate buffer */
- size_t newlen;
if (len > SIZE_MAX - MBFL_MEMORY_DEVICE_ALLOC_SIZE
|| device->length > SIZE_MAX - (len + MBFL_MEMORY_DEVICE_ALLOC_SIZE)) {
@@ -166,50 +122,41 @@ mbfl_memory_device_strncat(mbfl_memory_device *device, const char *psrc, size_t
return -1;
}
- newlen = device->length + len + MBFL_MEMORY_DEVICE_ALLOC_SIZE;
+ size_t newlen = device->length + len + MBFL_MEMORY_DEVICE_ALLOC_SIZE;
device->buffer = erealloc(device->buffer, newlen);
device->length = newlen;
}
- w = &device->buffer[device->pos];
+ unsigned char *w = &device->buffer[device->pos];
memcpy(w, psrc, len);
device->pos += len;
return 0;
}
-int
-mbfl_memory_device_devcat(mbfl_memory_device *dest, mbfl_memory_device *src)
+int mbfl_memory_device_devcat(mbfl_memory_device *dest, mbfl_memory_device *src)
{
- return mbfl_memory_device_strncat(dest, (const char *) src->buffer, src->pos);
+ return mbfl_memory_device_strncat(dest, (const char*)src->buffer, src->pos);
}
-void
-mbfl_wchar_device_init(mbfl_wchar_device *device)
+void mbfl_wchar_device_init(mbfl_wchar_device *device)
{
- if (device) {
- device->buffer = NULL;
- device->length = 0;
- device->pos= 0;
- device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE;
- }
+ device->buffer = NULL;
+ device->length = 0;
+ device->pos = 0;
+ device->allocsz = MBFL_MEMORY_DEVICE_ALLOC_SIZE;
}
-void
-mbfl_wchar_device_clear(mbfl_wchar_device *device)
+void mbfl_wchar_device_clear(mbfl_wchar_device *device)
{
- if (device) {
- if (device->buffer) {
- efree(device->buffer);
- }
- device->buffer = NULL;
- device->length = 0;
- device->pos = 0;
+ if (device->buffer) {
+ efree(device->buffer);
}
+ device->buffer = NULL;
+ device->length = device->pos = 0;
}
-int
-mbfl_wchar_device_output(int c, void *data)
+int mbfl_wchar_device_output(int c, void *data)
{
mbfl_wchar_device *device = (mbfl_wchar_device *)data;
@@ -228,11 +175,10 @@ mbfl_wchar_device_output(int c, void *data)
return -1;
}
- device->buffer = erealloc(device->buffer, newlen*sizeof(int));
+ device->buffer = erealloc(device->buffer, newlen * sizeof(int));
device->length = newlen;
}
device->buffer[device->pos++] = c;
-
return c;
}
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h b/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h
index 7e86db3e06..b8a188ec84 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h
+++ b/ext/mbstring/libmbfl/mbfl/mbfl_memory_device.h
@@ -69,6 +69,4 @@ MBFLAPI extern void mbfl_wchar_device_init(mbfl_wchar_device *device);
MBFLAPI extern int mbfl_wchar_device_output(int c, void *data);
MBFLAPI extern void mbfl_wchar_device_clear(mbfl_wchar_device *device);
-
-
#endif /* MBFL_MEMORY_DEVICE_H */
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_string.c b/ext/mbstring/libmbfl/mbfl/mbfl_string.c
index a036356dd2..760634e65d 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfl_string.c
+++ b/ext/mbstring/libmbfl/mbfl/mbfl_string.c
@@ -31,31 +31,22 @@
#include "mbfl_string.h"
#include "mbfilter_pass.h"
-/*
- * string object
- */
-void
-mbfl_string_init(mbfl_string *string)
+void mbfl_string_init_set(mbfl_string *string, const mbfl_encoding *encoding)
{
- string->encoding = &mbfl_encoding_pass;
- string->val = (unsigned char*)NULL;
+ string->encoding = encoding;
+ string->val = NULL;
string->len = 0;
}
-void
-mbfl_string_init_set(mbfl_string *string, const mbfl_encoding *encoding)
+void mbfl_string_init(mbfl_string *string)
{
- string->encoding = encoding;
- string->val = (unsigned char*)NULL;
- string->len = 0;
+ mbfl_string_init_set(string, &mbfl_encoding_pass);
}
-void
-mbfl_string_clear(mbfl_string *string)
+void mbfl_string_clear(mbfl_string *string)
{
- if (string->val != (unsigned char*)NULL) {
+ if (string->val) {
efree(string->val);
}
- string->val = (unsigned char*)NULL;
- string->len = 0;
+ mbfl_string_init_set(string, NULL); /* Poison it so any attempt to reuse will fail hard */
}
diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c
index b6395aecdd..e02b237bf7 100644
--- a/ext/mbstring/mbstring.c
+++ b/ext/mbstring/mbstring.c
@@ -1497,9 +1497,6 @@ PHP_FUNCTION(mb_preferred_mime_name)
}
/* }}} */
-#define IS_SJIS1(c) ((((c)>=0x81 && (c)<=0x9f) || ((c)>=0xe0 && (c)<=0xf5)) ? 1 : 0)
-#define IS_SJIS2(c) ((((c)>=0x40 && (c)<=0x7e) || ((c)>=0x80 && (c)<=0xfc)) ? 1 : 0)
-
/* {{{ Parses GET/POST/COOKIE data and sets global variables */
PHP_FUNCTION(mb_parse_str)
{
@@ -2764,8 +2761,7 @@ PHP_FUNCTION(mb_encoding_aliases)
array_init(return_value);
if (encoding->aliases != NULL) {
- const char **alias;
- for (alias = *encoding->aliases; *alias; ++alias) {
+ for (const char **alias = encoding->aliases; *alias; ++alias) {
add_next_index_string(return_value, (char *)*alias);
}
}
@@ -3649,7 +3645,7 @@ PHP_FUNCTION(mb_send_mail)
if (!suppressed_hdrs.cnt_type) {
mbfl_memory_device_strncat(&device, PHP_MBSTR_MAIL_MIME_HEADER2, sizeof(PHP_MBSTR_MAIL_MIME_HEADER2) - 1);
- p = (char *)mbfl_no2preferred_mime_name(tran_cs->no_encoding);
+ p = (char *)mbfl_encoding_preferred_mime_name(tran_cs);
if (p != NULL) {
mbfl_memory_device_strncat(&device, PHP_MBSTR_MAIL_MIME_HEADER3, sizeof(PHP_MBSTR_MAIL_MIME_HEADER3) - 1);
mbfl_memory_device_strcat(&device, p);
@@ -3658,7 +3654,7 @@ PHP_FUNCTION(mb_send_mail)
}
if (!suppressed_hdrs.cnt_trans_enc) {
mbfl_memory_device_strncat(&device, PHP_MBSTR_MAIL_MIME_HEADER4, sizeof(PHP_MBSTR_MAIL_MIME_HEADER4) - 1);
- p = (char *)mbfl_no2preferred_mime_name(body_enc->no_encoding);
+ p = (char *)mbfl_encoding_preferred_mime_name(body_enc);
if (p == NULL) {
p = "7bit";
}
diff --git a/ext/mbstring/tests/mb_convert_encoding_failed_detection.phpt b/ext/mbstring/tests/mb_convert_encoding_failed_detection.phpt
index b3c8ba10bb..45efe28766 100644
--- a/ext/mbstring/tests/mb_convert_encoding_failed_detection.phpt
+++ b/ext/mbstring/tests/mb_convert_encoding_failed_detection.phpt
@@ -1,5 +1,7 @@
--TEST--
mb_convert_encoding() when encoding detection fails
+--INI--
+mbstring.strict_detection=1
--FILE--
<?php
diff --git a/ext/mysqlnd/mysqlnd_ps.c b/ext/mysqlnd/mysqlnd_ps.c
index 2415b91a3b..5572c73fd6 100644
--- a/ext/mysqlnd/mysqlnd_ps.c
+++ b/ext/mysqlnd/mysqlnd_ps.c
@@ -109,7 +109,7 @@ MYSQLND_METHOD(mysqlnd_stmt, store_result)(MYSQLND_STMT * const s)
}
/* Position at the first row */
set->data_cursor = set->data;
- } else if (result->stored_data->type == MYSQLND_BUFFERED_TYPE_ZVAL) {
+ } else if (result->stored_data->type == MYSQLND_BUFFERED_TYPE_C) {
/*TODO*/
}
diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c
index 2e81db2bbf..25ee7afb2e 100644
--- a/ext/pdo/pdo_dbh.c
+++ b/ext/pdo/pdo_dbh.c
@@ -1291,8 +1291,12 @@ static int dbh_compare(zval *object1, zval *object2)
static HashTable *dbh_get_gc(zend_object *object, zval **gc_data, int *gc_count)
{
pdo_dbh_t *dbh = php_pdo_dbh_fetch_inner(object);
- *gc_data = &dbh->def_stmt_ctor_args;
- *gc_count = 1;
+ zend_get_gc_buffer *gc_buffer = zend_get_gc_buffer_create();
+ zend_get_gc_buffer_add_zval(gc_buffer, &dbh->def_stmt_ctor_args);
+ if (dbh->methods->get_gc) {
+ dbh->methods->get_gc(dbh, gc_buffer);
+ }
+ zend_get_gc_buffer_use(gc_buffer, gc_data, gc_count);
return zend_std_get_properties(object);
}
diff --git a/ext/pdo/php_pdo_driver.h b/ext/pdo/php_pdo_driver.h
index 960ddec4ef..974eb0bad0 100644
--- a/ext/pdo/php_pdo_driver.h
+++ b/ext/pdo/php_pdo_driver.h
@@ -286,6 +286,10 @@ typedef int (*pdo_dbh_check_liveness_func)(pdo_dbh_t *dbh);
* scope */
typedef void (*pdo_dbh_request_shutdown)(pdo_dbh_t *dbh);
+/* Called when the PDO handle is scanned for GC. Should populate the get_gc buffer
+ * with any zvals in the driver_data that would be freed if the handle is destroyed. */
+typedef void (*pdo_dbh_get_gc_func)(pdo_dbh_t *dbh, zend_get_gc_buffer *buffer);
+
/* for adding methods to the dbh or stmt objects
pointer to a list of driver specific functions. The convention is
to prefix the function names using the PDO driver name; this will
@@ -316,6 +320,7 @@ struct pdo_dbh_methods {
pdo_dbh_get_driver_methods_func get_driver_methods;
pdo_dbh_request_shutdown persistent_shutdown;
pdo_dbh_txn_func in_transaction;
+ pdo_dbh_get_gc_func get_gc;
};
/* }}} */
diff --git a/ext/pdo_dblib/dblib_driver.c b/ext/pdo_dblib/dblib_driver.c
index 7f160a402f..e581642037 100644
--- a/ext/pdo_dblib/dblib_driver.c
+++ b/ext/pdo_dblib/dblib_driver.c
@@ -417,7 +417,8 @@ static const struct pdo_dbh_methods dblib_methods = {
NULL, /* check liveness */
NULL, /* get driver methods */
NULL, /* request shutdown */
- NULL /* in transaction */
+ NULL, /* in transaction */
+ NULL /* get gc */
};
static int pdo_dblib_handle_factory(pdo_dbh_t *dbh, zval *driver_options)
diff --git a/ext/pdo_firebird/firebird_driver.c b/ext/pdo_firebird/firebird_driver.c
index c27a9e2ed5..c299907f0f 100644
--- a/ext/pdo_firebird/firebird_driver.c
+++ b/ext/pdo_firebird/firebird_driver.c
@@ -1005,7 +1005,11 @@ static const struct pdo_dbh_methods firebird_methods = { /* {{{ */
NULL, /* last_id not supported */
pdo_firebird_fetch_error_func,
firebird_handle_get_attribute,
- NULL /* check_liveness */
+ NULL, /* check_liveness */
+ NULL, /* get driver methods */
+ NULL, /* request shutdown */
+ NULL, /* in transaction */
+ NULL /* get gc */
};
/* }}} */
diff --git a/ext/pdo_mysql/mysql_driver.c b/ext/pdo_mysql/mysql_driver.c
index a666489a50..19923464e4 100644
--- a/ext/pdo_mysql/mysql_driver.c
+++ b/ext/pdo_mysql/mysql_driver.c
@@ -563,7 +563,8 @@ static const struct pdo_dbh_methods mysql_methods = {
pdo_mysql_check_liveness,
NULL,
pdo_mysql_request_shutdown,
- pdo_mysql_in_transaction
+ pdo_mysql_in_transaction,
+ NULL /* get_gc */
};
/* }}} */
diff --git a/ext/pdo_oci/oci_driver.c b/ext/pdo_oci/oci_driver.c
index 096a26575e..2c65fc973b 100644
--- a/ext/pdo_oci/oci_driver.c
+++ b/ext/pdo_oci/oci_driver.c
@@ -705,9 +705,10 @@ static const struct pdo_dbh_methods oci_methods = {
pdo_oci_fetch_error_func,
oci_handle_get_attribute,
pdo_oci_check_liveness, /* check_liveness */
- NULL, /* get_driver_methods */
- NULL,
- NULL
+ NULL, /* get_driver_methods */
+ NULL, /* request_shutdown */
+ NULL, /* in_transaction */
+ NULL /* get_gc */
};
static int pdo_oci_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* {{{ */
diff --git a/ext/pdo_odbc/odbc_driver.c b/ext/pdo_odbc/odbc_driver.c
index 9a254553d5..81e4915da5 100644
--- a/ext/pdo_odbc/odbc_driver.c
+++ b/ext/pdo_odbc/odbc_driver.c
@@ -384,7 +384,11 @@ static const struct pdo_dbh_methods odbc_methods = {
NULL, /* last id */
pdo_odbc_fetch_error_func,
odbc_handle_get_attr, /* get attr */
- NULL, /* check_liveness */
+ NULL, /* check_liveness */
+ NULL, /* get_driver_methods */
+ NULL, /* request_shutdown */
+ NULL, /* in_transaction */
+ NULL /* get_gc */
};
static int pdo_odbc_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* {{{ */
diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c
index d800d65a2d..37680b8efa 100644
--- a/ext/pdo_pgsql/pgsql_driver.c
+++ b/ext/pdo_pgsql/pgsql_driver.c
@@ -1179,6 +1179,7 @@ static const struct pdo_dbh_methods pgsql_methods = {
pdo_pgsql_get_driver_methods, /* get_driver_methods */
NULL,
pgsql_handle_in_transaction,
+ NULL /* get_gc */
};
static int pdo_pgsql_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* {{{ */
diff --git a/ext/pdo_sqlite/sqlite_driver.c b/ext/pdo_sqlite/sqlite_driver.c
index 26fa1c00eb..a8a96c7a13 100644
--- a/ext/pdo_sqlite/sqlite_driver.c
+++ b/ext/pdo_sqlite/sqlite_driver.c
@@ -695,6 +695,25 @@ static void pdo_sqlite_request_shutdown(pdo_dbh_t *dbh)
}
}
+static void pdo_sqlite_get_gc(pdo_dbh_t *dbh, zend_get_gc_buffer *gc_buffer)
+{
+ pdo_sqlite_db_handle *H = dbh->driver_data;
+
+ struct pdo_sqlite_func *func = H->funcs;
+ while (func) {
+ zend_get_gc_buffer_add_zval(gc_buffer, &func->func);
+ zend_get_gc_buffer_add_zval(gc_buffer, &func->step);
+ zend_get_gc_buffer_add_zval(gc_buffer, &func->fini);
+ func = func->next;
+ }
+
+ struct pdo_sqlite_collation *collation = H->collations;
+ while (collation) {
+ zend_get_gc_buffer_add_zval(gc_buffer, &collation->callback);
+ collation = collation->next;
+ }
+}
+
static const struct pdo_dbh_methods sqlite_methods = {
sqlite_handle_closer,
sqlite_handle_preparer,
@@ -710,7 +729,8 @@ static const struct pdo_dbh_methods sqlite_methods = {
NULL, /* check_liveness: not needed */
get_driver_methods,
pdo_sqlite_request_shutdown,
- NULL
+ NULL, /* in_transaction */
+ pdo_sqlite_get_gc
};
static char *make_filename_safe(const char *filename)
diff --git a/ext/pdo_sqlite/tests/gc.phpt b/ext/pdo_sqlite/tests/gc.phpt
new file mode 100644
index 0000000000..25407697e6
--- /dev/null
+++ b/ext/pdo_sqlite/tests/gc.phpt
@@ -0,0 +1,24 @@
+--TEST--
+GC support for PDO Sqlite driver data
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo_sqlite')) print 'skip not loaded';
+?>
+--FILE--
+<?php
+
+class Obj {
+ public $a;
+ public function callback() { }
+}
+
+$obj = new Obj;
+$obj->a = new PDO('sqlite::memory:');
+$obj->a->sqliteCreateFunction('func1', function() use ($obj) {}, 1);
+$obj->a->sqliteCreateAggregate('func2', function() use ($obj) {}, function() use($obj) {});
+$obj->a->sqliteCreateCollation('col', function() use ($obj) {});
+
+?>
+===DONE===
+--EXPECT--
+===DONE===
diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c
index 0b21c4f684..c50d8d5d71 100644
--- a/ext/sockets/sockets.c
+++ b/ext/sockets/sockets.c
@@ -1045,11 +1045,7 @@ PHP_FUNCTION(socket_read)
if (retval == -1) {
/* if the socket is in non-blocking mode and there's no data to read,
don't output any error, as this is a normal situation, and not an error */
- if (errno == EAGAIN
-#ifdef EWOULDBLOCK
- || errno == EWOULDBLOCK
-#endif
- ) {
+ if (PHP_IS_TRANSIENT_ERROR(errno)) {
php_sock->error = errno;
SOCKETS_G(last_error) = errno;
} else {
diff --git a/ext/sodium/config.m4 b/ext/sodium/config.m4
index 0676b66910..05d9ebd5a1 100644
--- a/ext/sodium/config.m4
+++ b/ext/sodium/config.m4
@@ -11,8 +11,9 @@ if test "$PHP_SODIUM" != "no"; then
AC_DEFINE(HAVE_LIBSODIUMLIB, 1, [ ])
- dnl Add -Wno-type-limits as this may arise on 32bits platforms
+ dnl Add -Wno-type-limits and -Wno-logical-op as this may arise on 32bits platforms
SODIUM_COMPILER_FLAGS="$LIBSODIUM_CFLAGS -Wno-type-limits"
+ AX_CHECK_COMPILE_FLAG([-Wno-logical-op], SODIUM_COMPILER_FLAGS="$SODIUM_COMPILER_FLAGS -Wno-logical-op", , [-Werror])
PHP_NEW_EXTENSION(sodium, libsodium.c sodium_pwhash.c, $ext_shared, , $SODIUM_COMPILER_FLAGS)
PHP_SUBST(SODIUM_SHARED_LIBADD)
fi
diff --git a/ext/standard/php_http.h b/ext/standard/php_http.h
index 1df941ee00..3f764c18a6 100644
--- a/ext/standard/php_http.h
+++ b/ext/standard/php_http.h
@@ -25,6 +25,5 @@ PHPAPI void php_url_encode_hash_ex(HashTable *ht, smart_str *formstr,
const char *key_prefix, size_t key_prefix_len,
const char *key_suffix, size_t key_suffix_len,
zval *type, const char *arg_sep, int enc_type);
-#define php_url_encode_hash(ht, formstr) php_url_encode_hash_ex((ht), (formstr), NULL, 0, NULL, 0, NULL, 0, NULL)
#endif