summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter.c5
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_convert.c7
2 files changed, 8 insertions, 4 deletions
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter.c b/ext/mbstring/libmbfl/mbfl/mbfilter.c
index 48dbc75920..313ea598fc 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfilter.c
+++ b/ext/mbstring/libmbfl/mbfl/mbfilter.c
@@ -147,7 +147,7 @@ mbfl_buffer_converter_new(
/* create convert filter */
convd->filter1 = NULL;
-convd->filter2 = NULL;
+ convd->filter2 = NULL;
if (mbfl_convert_filter_get_vtbl(convd->from, convd->to) != NULL) {
convd->filter1 = mbfl_convert_filter_new(convd->from, convd->to, mbfl_memory_device_output, NULL, &convd->device);
} else {
@@ -164,6 +164,7 @@ convd->filter2 = NULL;
}
}
if (convd->filter1 == NULL) {
+ mbfl_free(convd);
return NULL;
}
@@ -2399,7 +2400,7 @@ mime_header_decoder_new(const mbfl_encoding *outcode)
mbfl_memory_device_init(&pd->tmpdev, 0, 0);
pd->cspos = 0;
pd->status = 0;
- pd->encoding = &mbfl_encoding_pass;
+ pd->encoding = &mbfl_encoding_8bit;
pd->incode = &mbfl_encoding_ascii;
pd->outcode = outcode;
/* charset convert filter */
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c
index 7a0fb60264..b42d69b0a3 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c
+++ b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c
@@ -171,9 +171,8 @@ mbfl_convert_filter_new(
const struct mbfl_convert_vtbl *vtbl;
vtbl = mbfl_convert_filter_get_vtbl(from, to);
-
if (vtbl == NULL) {
- vtbl = &vtbl_pass;
+ return NULL;
}
/* allocate */
@@ -454,6 +453,10 @@ const struct mbfl_convert_vtbl * mbfl_convert_filter_get_vtbl(
to = &mbfl_encoding_8bit;
}
+ if (to == from && (to == &mbfl_encoding_wchar || to == &mbfl_encoding_8bit)) {
+ return &vtbl_pass;
+ }
+
if (to->no_encoding == mbfl_no_encoding_wchar) {
return from->input_filter;
} else if (from->no_encoding == mbfl_no_encoding_wchar) {