aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorStefan Monnier2002-04-01 22:58:39 +0000
committerStefan Monnier2002-04-01 22:58:39 +0000
commit02dcfd842feb9e299bec8a9571a1ee8e8bac6d98 (patch)
tree4889a9ee5ec64868351ba64d1922e51358f5dbd3 /src
parent4bc26a6c68113e9ac9d33755a109cbcf7acb4b69 (diff)
downloademacs-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.h12
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); \