diff options
| author | Stefan Monnier | 2002-04-01 22:58:39 +0000 |
|---|---|---|
| committer | Stefan Monnier | 2002-04-01 22:58:39 +0000 |
| commit | 02dcfd842feb9e299bec8a9571a1ee8e8bac6d98 (patch) | |
| tree | 4889a9ee5ec64868351ba64d1922e51358f5dbd3 /src | |
| parent | 4bc26a6c68113e9ac9d33755a109cbcf7acb4b69 (diff) | |
| download | emacs-02dcfd842feb9e299bec8a9571a1ee8e8bac6d98.tar.gz emacs-02dcfd842feb9e299bec8a9571a1ee8e8bac6d98.zip | |
(DEC_POS, BUF_DEC_POS): Use BEG_BYTE.
Bound the search with MAX_MULTIBYTE_LENGTH to avoid pathological case.
Diffstat (limited to 'src')
| -rw-r--r-- | src/charset.h | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/charset.h b/src/charset.h index d4e85d91ebf..42ab2308d68 100644 --- a/src/charset.h +++ b/src/charset.h | |||
| @@ -675,13 +675,15 @@ else | |||
| 675 | \ | 675 | \ |
| 676 | pos_byte--; \ | 676 | pos_byte--; \ |
| 677 | if (pos_byte < GPT_BYTE) \ | 677 | if (pos_byte < GPT_BYTE) \ |
| 678 | p = BEG_ADDR + pos_byte - 1, p_min = BEG_ADDR; \ | 678 | p = BEG_ADDR + pos_byte - BEG_BYTE, p_min = BEG_ADDR; \ |
| 679 | else \ | 679 | else \ |
| 680 | p = BEG_ADDR + GAP_SIZE + pos_byte - 1, p_min = GAP_END_ADDR; \ | 680 | p = BEG_ADDR + GAP_SIZE + pos_byte - BEG_BYTE, p_min = GAP_END_ADDR;\ |
| 681 | if (p > p_min && !CHAR_HEAD_P (*p)) \ | 681 | if (p > p_min && !CHAR_HEAD_P (*p)) \ |
| 682 | { \ | 682 | { \ |
| 683 | unsigned char *pend = p--; \ | 683 | unsigned char *pend = p--; \ |
| 684 | int len, bytes; \ | 684 | int len, bytes; \ |
| 685 | if (p_min < p - MAX_MULTIBYTE_LENGTH) \ | ||
| 686 | p_min = p - MAX_MULTIBYTE_LENGTH; \ | ||
| 685 | while (p > p_min && !CHAR_HEAD_P (*p)) p--; \ | 687 | while (p > p_min && !CHAR_HEAD_P (*p)) p--; \ |
| 686 | len = pend + 1 - p; \ | 688 | len = pend + 1 - p; \ |
| 687 | PARSE_MULTIBYTE_SEQ (p, len, bytes); \ | 689 | PARSE_MULTIBYTE_SEQ (p, len, bytes); \ |
| @@ -755,18 +757,20 @@ while (0) | |||
| 755 | pos_byte--; \ | 757 | pos_byte--; \ |
| 756 | if (pos_byte < BUF_GPT_BYTE (buf)) \ | 758 | if (pos_byte < BUF_GPT_BYTE (buf)) \ |
| 757 | { \ | 759 | { \ |
| 758 | p = BUF_BEG_ADDR (buf) + pos_byte - 1; \ | 760 | p = BUF_BEG_ADDR (buf) + pos_byte - BEG_BYTE; \ |
| 759 | p_min = BUF_BEG_ADDR (buf); \ | 761 | p_min = BUF_BEG_ADDR (buf); \ |
| 760 | } \ | 762 | } \ |
| 761 | else \ | 763 | else \ |
| 762 | { \ | 764 | { \ |
| 763 | p = BUF_BEG_ADDR (buf) + BUF_GAP_SIZE (buf) + pos_byte - 1; \ | 765 | p = BUF_BEG_ADDR (buf) + BUF_GAP_SIZE (buf) + pos_byte - BEG_BYTE;\ |
| 764 | p_min = BUF_GAP_END_ADDR (buf); \ | 766 | p_min = BUF_GAP_END_ADDR (buf); \ |
| 765 | } \ | 767 | } \ |
| 766 | if (p > p_min && !CHAR_HEAD_P (*p)) \ | 768 | if (p > p_min && !CHAR_HEAD_P (*p)) \ |
| 767 | { \ | 769 | { \ |
| 768 | unsigned char *pend = p--; \ | 770 | unsigned char *pend = p--; \ |
| 769 | int len, bytes; \ | 771 | int len, bytes; \ |
| 772 | if (p_min < p - MAX_MULTIBYTE_LENGTH) \ | ||
| 773 | p_min = p - MAX_MULTIBYTE_LENGTH; \ | ||
| 770 | while (p > p_min && !CHAR_HEAD_P (*p)) p--; \ | 774 | while (p > p_min && !CHAR_HEAD_P (*p)) p--; \ |
| 771 | len = pend + 1 - p; \ | 775 | len = pend + 1 - p; \ |
| 772 | PARSE_MULTIBYTE_SEQ (p, len, bytes); \ | 776 | PARSE_MULTIBYTE_SEQ (p, len, bytes); \ |