aboutsummaryrefslogtreecommitdiffstats
path: root/src/ccl.c
diff options
context:
space:
mode:
authorPaul Eggert2011-09-27 08:56:04 -0700
committerPaul Eggert2011-09-27 08:56:04 -0700
commitc801946a9290fe742d87053615495e68d04ec6be (patch)
tree1404a9de0353948071734ceb998205deba409934 /src/ccl.c
parentd99fb284f7ccb502ce12d7bd96350d0e2d3af1b4 (diff)
downloademacs-c801946a9290fe742d87053615495e68d04ec6be.tar.gz
emacs-c801946a9290fe742d87053615495e68d04ec6be.zip
* ccl.c (ccl_driver, Fregister_code_conversion_map): Check that Vcode_version_map_vector is a vector.
Diffstat (limited to 'src/ccl.c')
-rw-r--r--src/ccl.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/ccl.c b/src/ccl.c
index ffd412bba3e..4764fa0f5b5 100644
--- a/src/ccl.c
+++ b/src/ccl.c
@@ -1371,7 +1371,7 @@ ccl_driver (struct ccl_program *ccl, int *source, int *destination, int src_size
1371 1371
1372 for (;i < j;i++) 1372 for (;i < j;i++)
1373 { 1373 {
1374 1374 if (!VECTORP (Vcode_conversion_map_vector)) continue;
1375 size = ASIZE (Vcode_conversion_map_vector); 1375 size = ASIZE (Vcode_conversion_map_vector);
1376 point = XINT (ccl_prog[ic++]); 1376 point = XINT (ccl_prog[ic++]);
1377 if (! (0 <= point && point < size)) continue; 1377 if (! (0 <= point && point < size)) continue;
@@ -1447,7 +1447,8 @@ ccl_driver (struct ccl_program *ccl, int *source, int *destination, int src_size
1447 case CCL_MapMultiple: 1447 case CCL_MapMultiple:
1448 { 1448 {
1449 Lisp_Object map, content, attrib, value; 1449 Lisp_Object map, content, attrib, value;
1450 int point, size, map_vector_size; 1450 EMACS_INT point;
1451 ptrdiff_t size, map_vector_size;
1451 int map_set_rest_length, fin_ic; 1452 int map_set_rest_length, fin_ic;
1452 int current_ic = this_ic; 1453 int current_ic = this_ic;
1453 1454
@@ -1530,6 +1531,8 @@ ccl_driver (struct ccl_program *ccl, int *source, int *destination, int src_size
1530 break; 1531 break;
1531 } 1532 }
1532 } 1533 }
1534 if (!VECTORP (Vcode_conversion_map_vector))
1535 CCL_INVALID_CMD;
1533 map_vector_size = ASIZE (Vcode_conversion_map_vector); 1536 map_vector_size = ASIZE (Vcode_conversion_map_vector);
1534 1537
1535 do { 1538 do {
@@ -1652,7 +1655,8 @@ ccl_driver (struct ccl_program *ccl, int *source, int *destination, int src_size
1652 int point; 1655 int point;
1653 j = XINT (ccl_prog[ic++]); /* map_id */ 1656 j = XINT (ccl_prog[ic++]); /* map_id */
1654 op = reg[rrr]; 1657 op = reg[rrr];
1655 if (j >= ASIZE (Vcode_conversion_map_vector)) 1658 if (! (VECTORP (Vcode_conversion_map_vector)
1659 && j < ASIZE (Vcode_conversion_map_vector)))
1656 { 1660 {
1657 reg[RRR] = -1; 1661 reg[RRR] = -1;
1658 break; 1662 break;
@@ -1665,6 +1669,7 @@ ccl_driver (struct ccl_program *ccl, int *source, int *destination, int src_size
1665 } 1669 }
1666 map = XCDR (map); 1670 map = XCDR (map);
1667 if (! (VECTORP (map) 1671 if (! (VECTORP (map)
1672 && 0 < ASIZE (map)
1668 && INTEGERP (AREF (map, 0)) 1673 && INTEGERP (AREF (map, 0))
1669 && XINT (AREF (map, 0)) <= op 1674 && XINT (AREF (map, 0)) <= op
1670 && op - XINT (AREF (map, 0)) + 1 < ASIZE (map))) 1675 && op - XINT (AREF (map, 0)) + 1 < ASIZE (map)))
@@ -2257,12 +2262,16 @@ DEFUN ("register-code-conversion-map", Fregister_code_conversion_map,
2257Return index number of the registered map. */) 2262Return index number of the registered map. */)
2258 (Lisp_Object symbol, Lisp_Object map) 2263 (Lisp_Object symbol, Lisp_Object map)
2259{ 2264{
2260 ptrdiff_t len = ASIZE (Vcode_conversion_map_vector); 2265 ptrdiff_t len;
2261 ptrdiff_t i; 2266 ptrdiff_t i;
2262 Lisp_Object idx; 2267 Lisp_Object idx;
2263 2268
2264 CHECK_SYMBOL (symbol); 2269 CHECK_SYMBOL (symbol);
2265 CHECK_VECTOR (map); 2270 CHECK_VECTOR (map);
2271 if (! VECTORP (Vcode_conversion_map_vector))
2272 error ("Invalid code-conversion-map-vector");
2273
2274 len = ASIZE (Vcode_conversion_map_vector);
2266 2275
2267 for (i = 0; i < len; i++) 2276 for (i = 0; i < len; i++)
2268 { 2277 {