aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert2016-04-01 01:24:55 -0700
committerPaul Eggert2016-04-01 01:25:14 -0700
commit423d6a6156cea32757f13277e31a5867aec12dca (patch)
tree104abc47b8cd5da1caac4fc026fa99f8bfcd347b /src
parent750e1e19429cd781e2e60b462d19ef827d4da943 (diff)
downloademacs-423d6a6156cea32757f13277e31a5867aec12dca.tar.gz
emacs-423d6a6156cea32757f13277e31a5867aec12dca.zip
Fix check for subscript errors in module calls
* src/emacs-module.c (check_vec_index): New function. (module_vec_set, module_vec_get): Use it instead of a not-strict-enough check.
Diffstat (limited to 'src')
-rw-r--r--src/emacs-module.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/emacs-module.c b/src/emacs-module.c
index f9ede84ed17..b57636e54e5 100644
--- a/src/emacs-module.c
+++ b/src/emacs-module.c
@@ -588,13 +588,21 @@ module_set_user_finalizer (emacs_env *env, emacs_value uptr,
588} 588}
589 589
590static void 590static void
591check_vec_index (Lisp_Object lvec, ptrdiff_t i)
592{
593 CHECK_VECTOR (lvec);
594 if (! (0 <= i && i < ASIZE (lvec)))
595 args_out_of_range_3 (make_fixnum_or_float (i),
596 make_number (0), make_number (ASIZE (lvec) - 1));
597}
598
599static void
591module_vec_set (emacs_env *env, emacs_value vec, ptrdiff_t i, emacs_value val) 600module_vec_set (emacs_env *env, emacs_value vec, ptrdiff_t i, emacs_value val)
592{ 601{
593 /* FIXME: This function should return bool because it can fail. */ 602 /* FIXME: This function should return bool because it can fail. */
594 MODULE_FUNCTION_BEGIN (); 603 MODULE_FUNCTION_BEGIN ();
595 Lisp_Object lvec = value_to_lisp (vec); 604 Lisp_Object lvec = value_to_lisp (vec);
596 CHECK_VECTOR (lvec); 605 check_vec_index (lvec, i);
597 CHECK_RANGED_INTEGER (make_number (i), 0, ASIZE (lvec) - 1);
598 ASET (lvec, i, value_to_lisp (val)); 606 ASET (lvec, i, value_to_lisp (val));
599} 607}
600 608
@@ -603,8 +611,7 @@ module_vec_get (emacs_env *env, emacs_value vec, ptrdiff_t i)
603{ 611{
604 MODULE_FUNCTION_BEGIN (module_nil); 612 MODULE_FUNCTION_BEGIN (module_nil);
605 Lisp_Object lvec = value_to_lisp (vec); 613 Lisp_Object lvec = value_to_lisp (vec);
606 CHECK_VECTOR (lvec); 614 check_vec_index (lvec, i);
607 CHECK_RANGED_INTEGER (make_number (i), 0, ASIZE (lvec) - 1);
608 return lisp_to_value (AREF (lvec, i)); 615 return lisp_to_value (AREF (lvec, i));
609} 616}
610 617