Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 15 additions & 17 deletions ext/mbstring/libmbfl/filters/mbfilter_7bit.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,21 +34,18 @@
static size_t mb_7bit_to_wchar(unsigned char **in, size_t *in_len, uint32_t *buf, size_t bufsize, unsigned int *state);
static void mb_wchar_to_7bit(uint32_t *in, size_t len, mb_convert_buf *buf, bool end);

const mbfl_encoding mbfl_encoding_7bit = {
const struct mbfl_convert_vtbl vtbl_7bit_wchar = {
mbfl_no_encoding_7bit,
"7bit",
"7bit",
NULL,
NULL,
MBFL_ENCTYPE_SBCS,
mbfl_no_encoding_wchar,
mbfl_filt_conv_common_ctor,
NULL,
mbfl_filt_conv_7bit_any,
mbfl_filt_conv_common_flush,
NULL,
mb_7bit_to_wchar,
mb_wchar_to_7bit
};

const struct mbfl_convert_vtbl vtbl_8bit_7bit = {
mbfl_no_encoding_8bit,
const struct mbfl_convert_vtbl vtbl_wchar_7bit = {
mbfl_no_encoding_wchar,
mbfl_no_encoding_7bit,
mbfl_filt_conv_common_ctor,
NULL,
Expand All @@ -57,25 +54,26 @@ const struct mbfl_convert_vtbl vtbl_8bit_7bit = {
NULL,
};

const struct mbfl_convert_vtbl vtbl_7bit_8bit = {
const mbfl_encoding mbfl_encoding_7bit = {
mbfl_no_encoding_7bit,
mbfl_no_encoding_8bit,
mbfl_filt_conv_common_ctor,
"7bit",
"7bit",
NULL,
mbfl_filt_conv_7bit_any,
mbfl_filt_conv_common_flush,
NULL,
MBFL_ENCTYPE_SBCS,
&vtbl_7bit_wchar,
&vtbl_wchar_7bit,
mb_7bit_to_wchar,
mb_wchar_to_7bit
};


#define CK(statement) do { if ((statement) < 0) return (-1); } while (0)

int mbfl_filt_conv_7bit_any(int c, mbfl_convert_filter *filter)
{
return (*filter->output_function)(c < 0x80 ? c : MBFL_BAD_INPUT, filter->data);
}


int mbfl_filt_conv_any_7bit(int c, mbfl_convert_filter *filter)
{
if (c >= 0 && c < 0x80) {
Expand Down
4 changes: 4 additions & 0 deletions ext/mbstring/libmbfl/filters/mbfilter_base64.c
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,10 @@ static void mb_wchar_to_base64(uint32_t *in, size_t len, mb_convert_buf *buf, bo
}

if (end && bits) {
if (chars_output > 72) {
out = mb_convert_buf_add2(out, '\r', '\n');
chars_output = 0;
}
if (bits == 8) {
out = mb_convert_buf_add4(out, mbfl_base64_table[(cache >> 2) & 0x3F], mbfl_base64_table[(cache & 0x3) << 4], '=', '=');
} else {
Expand Down
1 change: 1 addition & 0 deletions ext/mbstring/libmbfl/filters/mbfilter_big5.c
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,7 @@ static int mbfl_filt_conv_big5_wchar_flush(mbfl_convert_filter *filter)
{
if (filter->status == 1) {
/* 2-byte character was truncated */
filter->status = 0;
CK((*filter->output_function)(MBFL_BAD_INPUT, filter->data));
}

Expand Down
10 changes: 6 additions & 4 deletions ext/mbstring/libmbfl/filters/mbfilter_cp5022x.c
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,7 @@ static int mbfl_filt_conv_cp5022x_wchar_flush(mbfl_convert_filter *filter)
* escape sequence was truncated */
CK((*filter->output_function)(MBFL_BAD_INPUT, filter->data));
}
filter->status = 0;

if (filter->flush_function) {
(*filter->flush_function)(filter->data);
Expand Down Expand Up @@ -555,7 +556,9 @@ static int mbfl_filt_conv_wchar_cp50220_flush(mbfl_convert_filter *filter)

if (filter->cache) {
int s = mb_convert_kana_codepoint(filter->cache, 0, NULL, NULL, mode);
filter->filter_function = mbfl_filt_conv_wchar_cp50221;
mbfl_filt_conv_wchar_cp50221(s, filter);
filter->filter_function = mbfl_filt_conv_wchar_cp50220;
filter->cache = 0;
}

Expand Down Expand Up @@ -822,7 +825,7 @@ static int mbfl_filt_conv_wchar_cp50222_flush(mbfl_convert_filter *filter)
CK((*filter->output_function)(0x28, filter->data)); /* '(' */
CK((*filter->output_function)(0x42, filter->data)); /* 'B' */
}
filter->status &= 0xff;
filter->status = 0;

if (filter->flush_function) {
(*filter->flush_function)(filter->data);
Expand Down Expand Up @@ -1041,7 +1044,6 @@ static void mb_wchar_to_cp50220(uint32_t *in, size_t len, mb_convert_buf *buf, b
MB_CONVERT_BUF_LOAD(buf, out, limit);
MB_CONVERT_BUF_ENSURE(buf, out, limit, len);

bool consumed = false;
uint32_t w;

if (buf->state & 0xFFFF00) {
Expand All @@ -1060,10 +1062,10 @@ static void mb_wchar_to_cp50220(uint32_t *in, size_t len, mb_convert_buf *buf, b
* but the 'next one' will come in a separate buffer */
buf->state |= w << 8;
break;
} else {
w = mb_convert_kana_codepoint(w, len ? *in : 0, &consumed, NULL, MBFL_HAN2ZEN_KATAKANA | MBFL_HAN2ZEN_GLUE);
}

bool consumed = false;
w = mb_convert_kana_codepoint(w, len ? *in : 0, &consumed, NULL, MBFL_HAN2ZEN_KATAKANA | MBFL_HAN2ZEN_GLUE);
if (consumed) {
/* Two successive codepoints were converted into one */
in++; len--; consumed = false;
Expand Down
1 change: 1 addition & 0 deletions ext/mbstring/libmbfl/filters/mbfilter_cp51932.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ static int mbfl_filt_conv_cp51932_wchar_flush(mbfl_convert_filter *filter)
if (filter->status) {
/* Input string was truncated */
(*filter->output_function)(MBFL_BAD_INPUT, filter->data);
filter->status = 0;
}

if (filter->flush_function) {
Expand Down
1 change: 1 addition & 0 deletions ext/mbstring/libmbfl/filters/mbfilter_cp932.c
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,7 @@ static int mbfl_filt_conv_cp932_wchar_flush(mbfl_convert_filter *filter)
{
if (filter->status) {
(*filter->output_function)(MBFL_BAD_INPUT, filter->data);
filter->status = 0;
}

if (filter->flush_function) {
Expand Down
1 change: 1 addition & 0 deletions ext/mbstring/libmbfl/filters/mbfilter_cp936.c
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ static int mbfl_filt_conv_cp936_wchar_flush(mbfl_convert_filter *filter)
{
if (filter->status) {
/* 2-byte character was truncated */
filter->status = 0;
CK((*filter->output_function)(MBFL_BAD_INPUT, filter->data));
}

Expand Down
1 change: 1 addition & 0 deletions ext/mbstring/libmbfl/filters/mbfilter_euc_cn.c
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,7 @@ static int mbfl_filt_conv_euccn_wchar_flush(mbfl_convert_filter *filter)
{
if (filter->status == 1) {
/* 2-byte character was truncated */
filter->status = 0;
CK((*filter->output_function)(MBFL_BAD_INPUT, filter->data));
}

Expand Down
1 change: 1 addition & 0 deletions ext/mbstring/libmbfl/filters/mbfilter_euc_jp.c
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ static int mbfl_filt_conv_eucjp_wchar_flush(mbfl_convert_filter *filter)
{
if (filter->status) {
(*filter->output_function)(MBFL_BAD_INPUT, filter->data);
filter->status = 0;
}

if (filter->flush_function) {
Expand Down
1 change: 1 addition & 0 deletions ext/mbstring/libmbfl/filters/mbfilter_euc_jp_win.c
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,7 @@ static int mbfl_filt_conv_eucjpwin_wchar_flush(mbfl_convert_filter *filter)
{
if (filter->status) {
(*filter->output_function)(MBFL_BAD_INPUT, filter->data);
filter->status = 0;
}

if (filter->flush_function) {
Expand Down
1 change: 1 addition & 0 deletions ext/mbstring/libmbfl/filters/mbfilter_euc_kr.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@ static int mbfl_filt_conv_euckr_wchar_flush(mbfl_convert_filter *filter)
{
if (filter->status == 1) {
/* 2-byte character was truncated */
filter->status = 0;
CK((*filter->output_function)(MBFL_BAD_INPUT, filter->data));
}

Expand Down
1 change: 1 addition & 0 deletions ext/mbstring/libmbfl/filters/mbfilter_euc_tw.c
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,7 @@ static int mbfl_filt_conv_euctw_wchar_flush(mbfl_convert_filter *filter)
{
if (filter->status) {
/* 2-byte or 4-byte character was truncated */
filter->status = 0;
CK((*filter->output_function)(MBFL_BAD_INPUT, filter->data));
}

Expand Down
1 change: 1 addition & 0 deletions ext/mbstring/libmbfl/filters/mbfilter_gb18030.c
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,7 @@ static int mbfl_filt_conv_gb18030_wchar_flush(mbfl_convert_filter *filter)
{
if (filter->status) {
/* multi-byte character was truncated */
filter->status = 0;
CK((*filter->output_function)(MBFL_BAD_INPUT, filter->data));
}

Expand Down
7 changes: 3 additions & 4 deletions ext/mbstring/libmbfl/filters/mbfilter_htmlent.c
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ int mbfl_filt_conv_html_dec(int c, mbfl_convert_filter *filter)
int pos;
unsigned int ent = 0;
mbfl_html_entity_entry *entity;
char *buffer = (char*)filter->opaque;
unsigned char *buffer = (unsigned char*)filter->opaque;

if (!filter->status) {
if (c == '&' ) {
Expand All @@ -196,7 +196,7 @@ int mbfl_filt_conv_html_dec(int c, mbfl_convert_filter *filter)
if (filter->status > 3) {
/* numeric entity */
for (pos=3; pos<filter->status; pos++) {
int v = buffer[pos];
int v = buffer[pos];
if (v >= '0' && v <= '9') {
v = v - '0';
} else if (v >= 'A' && v <= 'F') {
Expand Down Expand Up @@ -242,13 +242,12 @@ int mbfl_filt_conv_html_dec(int c, mbfl_convert_filter *filter)
CK((*filter->output_function)(c, filter->data));
}
filter->status = 0;
/*php_error_docref("ref.mbstring", E_NOTICE, "mbstring decoded '%s'=%d", buffer, ent);*/
} else {
/* named entity */
buffer[filter->status] = 0;
entity = (mbfl_html_entity_entry *)mbfl_html_entity_list;
while (entity->name) {
if (!strcmp(buffer+1, entity->name)) {
if (!strcmp((const char*)buffer+1, entity->name)) {
ent = entity->code;
break;
}
Expand Down
2 changes: 2 additions & 0 deletions ext/mbstring/libmbfl/filters/mbfilter_hz.c
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,8 @@ static int mbfl_filt_conv_hz_wchar_flush(mbfl_convert_filter *filter)
CK((*filter->output_function)(MBFL_BAD_INPUT, filter->data));
}

filter->status = 0;

if (filter->flush_function) {
(*filter->flush_function)(filter->data);
}
Expand Down
2 changes: 2 additions & 0 deletions ext/mbstring/libmbfl/filters/mbfilter_iso2022_jp_ms.c
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,7 @@ static int mbfl_filt_conv_2022jpms_wchar_flush(mbfl_convert_filter *filter)
if (filter->status & 0xF) {
(*filter->output_function)(MBFL_BAD_INPUT, filter->data);
}
filter->status = 0;

if (filter->flush_function) {
(*filter->flush_function)(filter->data);
Expand Down Expand Up @@ -354,6 +355,7 @@ int mbfl_filt_conv_any_2022jpms_flush(mbfl_convert_filter *filter)
CK((*filter->output_function)('(', filter->data));
CK((*filter->output_function)('B', filter->data));
}
filter->status = 0;

if (filter->flush_function) {
(*filter->flush_function)(filter->data);
Expand Down
10 changes: 7 additions & 3 deletions ext/mbstring/libmbfl/filters/mbfilter_iso2022_kr.c
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ int mbfl_filt_conv_2022kr_wchar(int c, mbfl_convert_filter *filter)
if (c == '$') {
filter->status++;
} else {
filter->status = 0;
filter->status &= ~0xF;
CK((*filter->output_function)(MBFL_BAD_INPUT, filter->data));
}
break;
Expand All @@ -154,7 +154,7 @@ int mbfl_filt_conv_2022kr_wchar(int c, mbfl_convert_filter *filter)
if (c == ')') {
filter->status++;
} else {
filter->status = 0;
filter->status &= ~0xF;
CK((*filter->output_function)(MBFL_BAD_INPUT, filter->data));
}
break;
Expand All @@ -178,6 +178,7 @@ static int mbfl_filt_conv_2022kr_wchar_flush(mbfl_convert_filter *filter)
/* 2-byte character was truncated */
CK((*filter->output_function)(MBFL_BAD_INPUT, filter->data));
}
filter->status = 0;

if (filter->flush_function) {
(*filter->flush_function)(filter->data);
Expand Down Expand Up @@ -257,6 +258,10 @@ int mbfl_filt_conv_wchar_2022kr(int c, mbfl_convert_filter *filter)

static int mbfl_filt_conv_any_2022kr_flush(mbfl_convert_filter *filter)
{
if (filter->status & 0xF) {
/* Escape sequence or 2-byte character was truncated */
(*filter->output_function)(MBFL_BAD_INPUT, filter->data);
}
/* back to ascii */
if (filter->status & 0x10) {
CK((*filter->output_function)(0x0f, filter->data)); /* shift in */
Expand Down Expand Up @@ -304,7 +309,6 @@ static size_t mb_iso2022kr_to_wchar(unsigned char **in, size_t *in_len, uint32_t
p--;
}
*out++ = MBFL_BAD_INPUT;
*state = ASCII;
}
} else if (c == 0xF) {
*state = ASCII;
Expand Down
2 changes: 2 additions & 0 deletions ext/mbstring/libmbfl/filters/mbfilter_iso2022jp_mobile.c
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,7 @@ static int mbfl_filt_conv_2022jp_mobile_wchar_flush(mbfl_convert_filter *filter)
if (filter->status & 0xF) {
(*filter->output_function)(MBFL_BAD_INPUT, filter->data);
}
filter->status = 0;

if (filter->flush_function) {
(*filter->flush_function)(filter->data);
Expand Down Expand Up @@ -483,6 +484,7 @@ static int mbfl_filt_conv_wchar_2022jp_mobile_flush(mbfl_convert_filter *filter)
if ((filter->status & 0xFF) == 1 && (c1 == '#' || (c1 >= '0' && c1 <= '9'))) {
(*filter->output_function)(c1, filter->data);
}
filter->status = filter->cache = 0;

if (filter->flush_function) {
(*filter->flush_function)(filter->data);
Expand Down
5 changes: 4 additions & 1 deletion ext/mbstring/libmbfl/filters/mbfilter_jis.c
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,7 @@ static int mbfl_filt_conv_jis_wchar_flush(mbfl_convert_filter *filter)
* or else escape sequence was truncated */
CK((*filter->output_function)(MBFL_BAD_INPUT, filter->data));
}
filter->status = 0;

if (filter->flush_function) {
(*filter->flush_function)(filter->data);
Expand Down Expand Up @@ -451,7 +452,7 @@ mbfl_filt_conv_any_jis_flush(mbfl_convert_filter *filter)
CK((*filter->output_function)(0x28, filter->data)); /* '(' */
CK((*filter->output_function)(0x42, filter->data)); /* 'B' */
}
filter->status &= 0xff;
filter->status = 0;

if (filter->flush_function != NULL) {
return (*filter->flush_function)(filter->data);
Expand Down Expand Up @@ -480,6 +481,8 @@ static size_t mb_iso2022jp_to_wchar(unsigned char **in, size_t *in_len, uint32_t
/* ESC seen; this is an escape sequence */
if ((e - p) < 2) {
*out++ = MBFL_BAD_INPUT;
if (p != e && (*p == '$' || *p == '('))
p++;
continue;
}

Expand Down
1 change: 1 addition & 0 deletions ext/mbstring/libmbfl/filters/mbfilter_sjis.c
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,7 @@ static int mbfl_filt_conv_sjis_wchar_flush(mbfl_convert_filter *filter)
{
if (filter->status) {
(*filter->output_function)(MBFL_BAD_INPUT, filter->data);
filter->status = 0;
}

if (filter->flush_function) {
Expand Down
3 changes: 3 additions & 0 deletions ext/mbstring/libmbfl/filters/mbfilter_sjis_2004.c
Original file line number Diff line number Diff line change
Expand Up @@ -491,6 +491,7 @@ int mbfl_filt_conv_jis2004_wchar_flush(mbfl_convert_filter *filter)
if (filter->status & 0xF) {
CK((*filter->output_function)(MBFL_BAD_INPUT, filter->data));
}
filter->status = 0;

if (filter->flush_function) {
return (*filter->flush_function)(filter->data);
Expand Down Expand Up @@ -633,6 +634,8 @@ int mbfl_filt_conv_wchar_jis2004(int c, mbfl_convert_filter *filter)
if (filter->to->no_encoding == mbfl_no_encoding_eucjp2004) {
CK((*filter->output_function)(0x8e, filter->data));
CK((*filter->output_function)(s1, filter->data));
} else if (filter->to->no_encoding == mbfl_no_encoding_sjis2004 && (s1 >= 0xA1 && s1 <= 0xDF)) {
CK((*filter->output_function)(s1, filter->data));
} else {
CK(mbfl_filt_conv_illegal_output(c, filter));
}
Expand Down
1 change: 1 addition & 0 deletions ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,7 @@ mbfl_filt_conv_sjis_mac_wchar(int c, mbfl_convert_filter *filter)
static int mbfl_filt_conv_sjis_mac_wchar_flush(mbfl_convert_filter *filter)
{
if (filter->status == 1) {
filter->status = 0;
CK((*filter->output_function)(MBFL_BAD_INPUT, filter->data));
}

Expand Down
Loading