Mercurial > emacs
comparison src/coding.c @ 53007:36796e056954
(coding_allocate_composition_data): Reset
coding->composing to COMPOSITION_NO.
(coding_restore_composition): Detect invalid composition data.
Give Fstring and Fvector a Lispy integer, not C int.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Fri, 07 Nov 2003 05:55:27 +0000 |
parents | 4519d019f12e |
children | 858cdfcb7635 |
comparison
equal
deleted
inserted
replaced
53006:36e0303c65f1 | 53007:36796e056954 |
---|---|
1687 cmp_data->next = NULL; | 1687 cmp_data->next = NULL; |
1688 if (coding->cmp_data) | 1688 if (coding->cmp_data) |
1689 coding->cmp_data->next = cmp_data; | 1689 coding->cmp_data->next = cmp_data; |
1690 coding->cmp_data = cmp_data; | 1690 coding->cmp_data = cmp_data; |
1691 coding->cmp_data_start = 0; | 1691 coding->cmp_data_start = 0; |
1692 coding->composing = COMPOSITION_NO; | |
1692 } | 1693 } |
1693 | 1694 |
1694 /* Handle composition start sequence ESC 0, ESC 2, ESC 3, or ESC 4. | 1695 /* Handle composition start sequence ESC 0, ESC 2, ESC 3, or ESC 4. |
1695 ESC 0 : relative composition : ESC 0 CHAR ... ESC 1 | 1696 ESC 0 : relative composition : ESC 0 CHAR ... ESC 1 |
1696 ESC 2 : rulebase composition : ESC 2 CHAR RULE CHAR RULE ... CHAR ESC 1 | 1697 ESC 2 : rulebase composition : ESC 2 CHAR RULE CHAR RULE ... CHAR ESC 1 |
5438 { | 5439 { |
5439 int *data = cmp_data->data + i; | 5440 int *data = cmp_data->data + i; |
5440 enum composition_method method = (enum composition_method) data[3]; | 5441 enum composition_method method = (enum composition_method) data[3]; |
5441 Lisp_Object components; | 5442 Lisp_Object components; |
5442 | 5443 |
5444 if (data[0] < 0 || i + data[0] > cmp_data->used) | |
5445 /* Invalid composition data. */ | |
5446 break; | |
5447 | |
5443 if (method == COMPOSITION_RELATIVE) | 5448 if (method == COMPOSITION_RELATIVE) |
5444 components = Qnil; | 5449 components = Qnil; |
5445 else | 5450 else |
5446 { | 5451 { |
5447 int len = data[0] - 4, j; | 5452 int len = data[0] - 4, j; |
5451 && len % 2 == 0) | 5456 && len % 2 == 0) |
5452 len --; | 5457 len --; |
5453 for (j = 0; j < len; j++) | 5458 for (j = 0; j < len; j++) |
5454 args[j] = make_number (data[4 + j]); | 5459 args[j] = make_number (data[4 + j]); |
5455 components = (method == COMPOSITION_WITH_ALTCHARS | 5460 components = (method == COMPOSITION_WITH_ALTCHARS |
5456 ? Fstring (len, args) : Fvector (len, args)); | 5461 ? Fstring (make_number (len), args) |
5462 : Fvector (make_number (len), args)); | |
5457 } | 5463 } |
5458 compose_text (data[1], data[2], components, Qnil, obj); | 5464 compose_text (data[1], data[2], components, Qnil, obj); |
5459 } | 5465 } |
5460 cmp_data = cmp_data->next; | 5466 cmp_data = cmp_data->next; |
5461 } | 5467 } |