diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c b/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c index 59fd071e791..0ef5fba64d4 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c @@ -140,16 +140,18 @@ int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter) if (n < 0 || n > 63) { if (c == '-') { if (filter->status == 1) { /* "&-" -> "&" */ + filter->cache = filter->status = 0; CK((*filter->output_function)('&', filter->data)); } else if (filter->cache) { /* Base64-encoded section ended abruptly, with partially encoded characters, * or it could be that it ended on the first half of a surrogate pair */ + filter->cache = filter->status = 0; CK((*filter->output_function)(MBFL_BAD_INPUT, filter->data)); } } else { /* illegal character */ + filter->cache = filter->status = 0; CK((*filter->output_function)(MBFL_BAD_INPUT, filter->data)); } - filter->cache = filter->status = 0; return 0; } }