[前][次][番号順一覧][スレッド一覧]

ruby-changes:11843

From: nobu <ko1@a...>
Date: Wed, 20 May 2009 18:58:44 +0900 (JST)
Subject: [ruby-changes:11843] Ruby:r23498 (trunk): * vm_eval.c, vm_insnhelper.c: argument number is restricted to

nobu	2009-05-20 18:58:29 +0900 (Wed, 20 May 2009)

  New Revision: 23498

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=23498

  Log:
    * vm_eval.c, vm_insnhelper.c: argument number is restricted to
      int, and fixed overflow.

  Modified files:
    trunk/ChangeLog
    trunk/vm_eval.c
    trunk/vm_insnhelper.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 23497)
+++ ChangeLog	(revision 23498)
@@ -1,3 +1,8 @@
+Wed May 20 18:58:27 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* vm_eval.c, vm_insnhelper.c: argument number is restricted to
+	  int, and fixed overflow.
+
 Wed May 20 18:34:30 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* enum.c (zip_ary): should use long.
Index: vm_eval.c
===================================================================
--- vm_eval.c	(revision 23497)
+++ vm_eval.c	(revision 23498)
@@ -69,7 +69,7 @@
 	    cfp->method_id = oid;
 	    cfp->method_class = klass;
 
-	    val = call_cfunc(body->nd_cfnc, recv, body->nd_argc, argc, argv);
+	    val = call_cfunc(body->nd_cfnc, recv, (int)body->nd_argc, argc, argv);
 
 	    if (reg_cfp != th->cfp + 1) {
 		SDR2(reg_cfp);
@@ -199,12 +199,12 @@
 	    return method_missing(recv, mid, argc, argv,
 				  scope == 2 ? NOEX_VCALL : 0);
 	id = ent->mid0;
-	noex = ent->method->nd_noex;
+	noex = (int)ent->method->nd_noex;
 	klass = ent->method->nd_clss;
 	body = ent->method->nd_body;
     }
     else if ((method = rb_get_method_body(klass, id, &id)) != 0) {
-	noex = method->nd_noex;
+	noex = (int)method->nd_noex;
 	klass = method->nd_clss;
 	body = method->nd_body;
     }
Index: vm_insnhelper.c
===================================================================
--- vm_insnhelper.c	(revision 23497)
+++ vm_insnhelper.c	(revision 23498)
@@ -118,7 +118,7 @@
     const int m = iseq->argc;
     int argc = orig_argc;
     VALUE *argv = orig_argv;
-    int opt_pc = 0;
+    rb_num_t opt_pc = 0;
 
     th->mark_stack_len = argc + iseq->arg_size;
 
@@ -200,7 +200,7 @@
     }
 
     th->mark_stack_len = 0;
-    return opt_pc;
+    return (int)opt_pc;
 }
 
 static inline int
@@ -251,7 +251,7 @@
 	    /* do nothing */
 	}
 	else {
-	    int len = RARRAY_LEN(tmp);
+	    long len = RARRAY_LEN(tmp);
 	    ptr = RARRAY_PTR(tmp);
 	    cfp->sp -= 1;
 
@@ -373,7 +373,7 @@
 
 	reg_cfp->sp -= num + 1;
 
-	val = call_cfunc(mn->nd_cfnc, recv, mn->nd_argc, num, reg_cfp->sp + 1);
+	val = call_cfunc(mn->nd_cfnc, recv, (int)mn->nd_argc, num, reg_cfp->sp + 1);
 
 	if (reg_cfp != th->cfp + 1) {
 	    rb_bug("cfp consistency error - send");
@@ -443,7 +443,7 @@
     sp = rsp + iseq->arg_size;
 
     if (LIKELY(!(flag & VM_CALL_TAILCALL_BIT))) {
-	if (0) printf("local_size: %d, arg_size: %d\n",
+	if (0) printf("local_size: %"PRIdSIZE", arg_size: %d\n",
 		      iseq->local_size, iseq->arg_size);
 
 	/* clear local variables */
@@ -617,7 +617,7 @@
 	extern VALUE rb_f_send(int argc, VALUE *argv, VALUE recv);
 
 	if (node->nd_cfnc == rb_f_send) {
-	    int i = *num - 1;
+	    rb_num_t i = *num - 1;
 	    VALUE sym = TOPN(i);
 	    *id = SYMBOL_P(sym) ? SYM2ID(sym) : rb_to_id(sym);
 
@@ -700,7 +700,7 @@
 vm_yield_setup_block_args_complex(rb_thread_t *th, const rb_iseq_t * iseq,
 	int argc, VALUE * argv)
 {
-    int opt_pc = 0;
+    rb_num_t opt_pc = 0;
     int i;
     const int m = iseq->argc;
     const int r = iseq->arg_rest;
@@ -750,7 +750,7 @@
 	argv[start + i] = Qnil;
     }
 
-    return opt_pc;
+    return (int)opt_pc;
 }
 
 static inline int
@@ -762,7 +762,7 @@
     int argc = orig_argc;
     const int m = iseq->argc;
     VALUE ary;
-    int opt_pc = 0;
+    rb_num_t opt_pc = 0;
 
     th->mark_stack_len = argc;
 
@@ -867,7 +867,7 @@
 {
     rb_block_t * const block = GET_BLOCK_PTR();
     rb_iseq_t *iseq;
-    int argc = num;
+    int argc = (int)num;
 
     if (GET_ISEQ()->local_iseq->type != ISEQ_TYPE_METHOD || block == 0) {
 	rb_vm_localjump_error("no block given (yield)", Qnil, 0);
@@ -1254,8 +1254,8 @@
 vm_throw(rb_thread_t *th, rb_control_frame_t *reg_cfp,
 	 rb_num_t throw_state, VALUE throwobj)
 {
-    rb_num_t state = throw_state & 0xff;
-    rb_num_t flag = throw_state & 0x8000;
+    int state = (int)(throw_state & 0xff);
+    int flag = (int)(throw_state & 0x8000);
     rb_num_t level = throw_state >> 16;
 
     if (state != 0) {
@@ -1398,13 +1398,13 @@
 }
 
 static inline void
-vm_expandarray(rb_control_frame_t *cfp, VALUE ary, int num, int flag)
+vm_expandarray(rb_control_frame_t *cfp, VALUE ary, rb_num_t num, int flag)
 {
     int is_splat = flag & 0x01;
-    int space_size = num + is_splat;
+    rb_num_t space_size = num + is_splat;
     VALUE *base = cfp->sp, *ptr;
     volatile VALUE tmp_ary;
-    int len;
+    long len;
 
     if (TYPE(ary) != T_ARRAY) {
 	ary = rb_ary_to_ary(ary);
@@ -1418,7 +1418,7 @@
 
     if (flag & 0x02) {
 	/* post: ..., nil ,ary[-1], ..., ary[0..-num] # top */
-	int i = 0, j;
+	long i = 0, j;
 
 	if (len < num) {
 	    for (i=0; i<num-len; i++) {

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]