diff options
Diffstat (limited to 'src/coding.c')
| -rw-r--r-- | src/coding.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/src/coding.c b/src/coding.c index 99f5ed8f805..d8bee597756 100644 --- a/src/coding.c +++ b/src/coding.c | |||
| @@ -1703,7 +1703,8 @@ decode_coding_utf_16 (coding) | |||
| 1703 | const unsigned char *src_end = coding->source + coding->src_bytes; | 1703 | const unsigned char *src_end = coding->source + coding->src_bytes; |
| 1704 | const unsigned char *src_base; | 1704 | const unsigned char *src_base; |
| 1705 | int *charbuf = coding->charbuf + coding->charbuf_used; | 1705 | int *charbuf = coding->charbuf + coding->charbuf_used; |
| 1706 | int *charbuf_end = coding->charbuf + coding->charbuf_size; | 1706 | /* We may produces at most 3 chars in one loop. */ |
| 1707 | int *charbuf_end = coding->charbuf + coding->charbuf_size - 2; | ||
| 1707 | int consumed_chars = 0, consumed_chars_base = 0; | 1708 | int consumed_chars = 0, consumed_chars_base = 0; |
| 1708 | int multibytep = coding->src_multibyte; | 1709 | int multibytep = coding->src_multibyte; |
| 1709 | enum utf_bom_type bom = CODING_UTF_16_BOM (coding); | 1710 | enum utf_bom_type bom = CODING_UTF_16_BOM (coding); |
| @@ -1749,7 +1750,7 @@ decode_coding_utf_16 (coding) | |||
| 1749 | src_base = src; | 1750 | src_base = src; |
| 1750 | consumed_chars_base = consumed_chars; | 1751 | consumed_chars_base = consumed_chars; |
| 1751 | 1752 | ||
| 1752 | if (charbuf + 2 >= charbuf_end) | 1753 | if (charbuf >= charbuf_end) |
| 1753 | { | 1754 | { |
| 1754 | if (byte_after_cr1 >= 0) | 1755 | if (byte_after_cr1 >= 0) |
| 1755 | src_base -= 2; | 1756 | src_base -= 2; |
| @@ -2442,8 +2443,10 @@ decode_coding_emacs_mule (coding) | |||
| 2442 | const unsigned char *src_end = coding->source + coding->src_bytes; | 2443 | const unsigned char *src_end = coding->source + coding->src_bytes; |
| 2443 | const unsigned char *src_base; | 2444 | const unsigned char *src_base; |
| 2444 | int *charbuf = coding->charbuf + coding->charbuf_used; | 2445 | int *charbuf = coding->charbuf + coding->charbuf_used; |
| 2446 | /* We may produce two annocations (charset and composition) in one | ||
| 2447 | loop and one more charset annocation at the end. */ | ||
| 2445 | int *charbuf_end | 2448 | int *charbuf_end |
| 2446 | = coding->charbuf + coding->charbuf_size - MAX_ANNOTATION_LENGTH; | 2449 | = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 3); |
| 2447 | int consumed_chars = 0, consumed_chars_base; | 2450 | int consumed_chars = 0, consumed_chars_base; |
| 2448 | int multibytep = coding->src_multibyte; | 2451 | int multibytep = coding->src_multibyte; |
| 2449 | Lisp_Object attrs, charset_list; | 2452 | Lisp_Object attrs, charset_list; |
| @@ -3558,8 +3561,10 @@ decode_coding_iso_2022 (coding) | |||
| 3558 | const unsigned char *src_end = coding->source + coding->src_bytes; | 3561 | const unsigned char *src_end = coding->source + coding->src_bytes; |
| 3559 | const unsigned char *src_base; | 3562 | const unsigned char *src_base; |
| 3560 | int *charbuf = coding->charbuf + coding->charbuf_used; | 3563 | int *charbuf = coding->charbuf + coding->charbuf_used; |
| 3564 | /* We may produce two annocations (charset and composition) in one | ||
| 3565 | loop and one more charset annocation at the end. */ | ||
| 3561 | int *charbuf_end | 3566 | int *charbuf_end |
| 3562 | = coding->charbuf + coding->charbuf_size - MAX_ANNOTATION_LENGTH; | 3567 | = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 3); |
| 3563 | int consumed_chars = 0, consumed_chars_base; | 3568 | int consumed_chars = 0, consumed_chars_base; |
| 3564 | int multibytep = coding->src_multibyte; | 3569 | int multibytep = coding->src_multibyte; |
| 3565 | /* Charsets invoked to graphic plane 0 and 1 respectively. */ | 3570 | /* Charsets invoked to graphic plane 0 and 1 respectively. */ |
| @@ -4758,8 +4763,10 @@ decode_coding_sjis (coding) | |||
| 4758 | const unsigned char *src_end = coding->source + coding->src_bytes; | 4763 | const unsigned char *src_end = coding->source + coding->src_bytes; |
| 4759 | const unsigned char *src_base; | 4764 | const unsigned char *src_base; |
| 4760 | int *charbuf = coding->charbuf + coding->charbuf_used; | 4765 | int *charbuf = coding->charbuf + coding->charbuf_used; |
| 4766 | /* We may produce one charset annocation in one loop and one more at | ||
| 4767 | the end. */ | ||
| 4761 | int *charbuf_end | 4768 | int *charbuf_end |
| 4762 | = coding->charbuf + coding->charbuf_size - MAX_ANNOTATION_LENGTH; | 4769 | = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 2); |
| 4763 | int consumed_chars = 0, consumed_chars_base; | 4770 | int consumed_chars = 0, consumed_chars_base; |
| 4764 | int multibytep = coding->src_multibyte; | 4771 | int multibytep = coding->src_multibyte; |
| 4765 | struct charset *charset_roman, *charset_kanji, *charset_kana; | 4772 | struct charset *charset_roman, *charset_kanji, *charset_kana; |
| @@ -4875,8 +4882,10 @@ decode_coding_big5 (coding) | |||
| 4875 | const unsigned char *src_end = coding->source + coding->src_bytes; | 4882 | const unsigned char *src_end = coding->source + coding->src_bytes; |
| 4876 | const unsigned char *src_base; | 4883 | const unsigned char *src_base; |
| 4877 | int *charbuf = coding->charbuf + coding->charbuf_used; | 4884 | int *charbuf = coding->charbuf + coding->charbuf_used; |
| 4885 | /* We may produce one charset annocation in one loop and one more at | ||
| 4886 | the end. */ | ||
| 4878 | int *charbuf_end | 4887 | int *charbuf_end |
| 4879 | = coding->charbuf + coding->charbuf_size - MAX_ANNOTATION_LENGTH; | 4888 | = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 2); |
| 4880 | int consumed_chars = 0, consumed_chars_base; | 4889 | int consumed_chars = 0, consumed_chars_base; |
| 4881 | int multibytep = coding->src_multibyte; | 4890 | int multibytep = coding->src_multibyte; |
| 4882 | struct charset *charset_roman, *charset_big5; | 4891 | struct charset *charset_roman, *charset_big5; |
| @@ -5549,8 +5558,10 @@ decode_coding_charset (coding) | |||
| 5549 | const unsigned char *src_end = coding->source + coding->src_bytes; | 5558 | const unsigned char *src_end = coding->source + coding->src_bytes; |
| 5550 | const unsigned char *src_base; | 5559 | const unsigned char *src_base; |
| 5551 | int *charbuf = coding->charbuf + coding->charbuf_used; | 5560 | int *charbuf = coding->charbuf + coding->charbuf_used; |
| 5561 | /* We may produce one charset annocation in one loop and one more at | ||
| 5562 | the end. */ | ||
| 5552 | int *charbuf_end | 5563 | int *charbuf_end |
| 5553 | = coding->charbuf + coding->charbuf_size - MAX_ANNOTATION_LENGTH; | 5564 | = coding->charbuf + coding->charbuf_size - (MAX_ANNOTATION_LENGTH * 2); |
| 5554 | int consumed_chars = 0, consumed_chars_base; | 5565 | int consumed_chars = 0, consumed_chars_base; |
| 5555 | int multibytep = coding->src_multibyte; | 5566 | int multibytep = coding->src_multibyte; |
| 5556 | Lisp_Object attrs, charset_list, valids; | 5567 | Lisp_Object attrs, charset_list, valids; |