# Overflow on LP64

**URL:** <https://www.ruby-forum.com/t/overflow-on-lp64/168405>\
**Category:** Development\
**Created:** [May 20, 2009, 1:04pm UTC](https://www.ruby-forum.com/t/overflow-on-lp64/168405 "2009-05-20T13:04:42Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [May 20, 2009, 1:04pm UTC](https://www.ruby-forum.com/t/overflow-on-lp64/168405/1 "2009-05-20T13:04:42Z")

</div>

e$B$J$+$@$G$9!#e(B

e$B$H$-$I$-!“e(Blonge$B$+$ie(Binte$B$K0EL[$N$&$A$KJQ49$7$F$$$k$H$3$m$,$”$j$^$9!#e(B  
e$B$[$H$s$I$N$H$3$m$O7?$r9g$o$;$k$@$1$G$b$9$`$N$G$9$,!"$?$H$($Pe(B  
RARRAY\_LEN()e$B$J$I$+$ie(Brb\_funcall()e$B$J$I$r8F$S=P$7$F$$$k\>l9g!"\<B9T;~e(B  
e$B$K%\*!\<%P!\<%U%m!\<$,5/$-$k2DG=@-$,$"$j$^$9!#e(B

e$B0BA4$Ke(Blong-\>inte$B$N%-%c%9%H$r9T$&4X?t$rDI2C$9$k$N$,$$$$$N$G$O$J$$e(B  
e$B0BA4$Ke(Blong-\>e$B$+$H;W$$$^$9!#e(B

# Index: numeric.c

— numeric.c (revision 23498)  
+++ numeric.c (working copy)  
@@ -1719,4 +1719,14 @@ rb\_fix2int(VALUE val)  
#endif

+#undef rb\_long2int  
+int  
+rb\_long2int(long n)  
+{  
+#if SIZEOF\_INT \< SIZEOF\_LONG

- check\_int(n);  
+#endif
- return (int)n;  
+}
- 

# VALUE rb\_num2fix(VALUE val) Index: struct.c

— struct.c (revision 23499)  
+++ struct.c (working copy)  
@@ -379,5 +379,5 @@ VALUE  
rb\_struct\_initialize(VALUE self, VALUE values)  
{

- return rb\_struct\_initialize\_m(RARRAY\_LEN(values),  
RARRAY\_PTR(values), self);

- return rb\_struct\_initialize\_m(RARRAY\_LENINT(values),  
RARRAY\_PTR(values), self);  
}

@@ -415,8 +415,8 @@ rb\_struct\_new(VALUE klass, …)  
{  
VALUE tmpargs[N\_REF\_FUNC], \*mem = tmpargs;

- long size, i;

- int size, i;  
va\_list args;

- size = num\_members(klass);

- size = rb\_long2int(num\_members(klass));  
if (size \> numberof(tmpargs)) {  
tmpargs[0] = rb\_ary\_tmp\_new(size);  
Index: vm\_eval.c  
===================================================================  
— vm\_eval.c (revision 23498)  
+++ vm\_eval.c (working copy)  
@@ -399,5 +399,5 @@ rb\_apply(VALUE recv, ID mid, VALUE args)  
VALUE \*argv;

- argc = RARRAY\_LEN(args); /\* Assigns LONG, but argc is INT \*/

- argc = RARRAY\_LENINT(args);  
argv = ALLOCA\_N(VALUE, argc);  
MEMCPY(argv, RARRAY\_PTR(args), VALUE, argc);  
@@ -553,5 +553,5 @@ rb\_yield\_splat(VALUE values)  
rb\_raise(rb\_eArgError, “not an array”);  
}

- v = rb\_yield\_0(RARRAY\_LEN(tmp), RARRAY\_PTR(tmp));

- v = rb\_yield\_0(RARRAY\_LENINT(tmp), RARRAY\_PTR(tmp));  
return v;  
}  
@@ -910,5 +910,5 @@ rb\_eval\_cmd(VALUE cmd, VALUE arg, int le  
rb\_set\_safe\_level\_force(level);  
if ((state = EXEC\_TAG()) == 0) {

- 

```
 val = rb_funcall2(cmd, rb_intern("call"), RARRAY_LEN(arg),

```

- 

```
 val = rb_funcall2(cmd, rb_intern("call"), RARRAY_LENINT(arg),
       RARRAY_PTR(arg));

```

}  
@@ -952,5 +952,5 @@ yield\_under(VALUE under, VALUE self, VAL  
}  
else {

- return vm\_yield\_with\_cref(th, RARRAY\_LEN(values), RARRAY\_PTR(values),  
cref);

- return vm\_yield\_with\_cref(th, RARRAY\_LENINT(values),  
RARRAY\_PTR(values), cref);  
}  
}  
Index: vm\_insnhelper.c  
===================================================================  
— vm\_insnhelper.c (revision 23498)  
+++ vm\_insnhelper.c (working copy)  
@@ -775,5 +775,5 @@ vm\_yield\_setup\_block\_args(rb\_thread\_t _t  
(m + iseq-\>arg\_post\_len) \> 0 && /_ this process is  
meaningful _/  
argc == 1 && !NIL\_P(ary = rb\_check\_array\_type(argv[0]))) {  
/_ rhs is only an array \*/

- 

```
   th->mark_stack_len = argc = RARRAY_LEN(ary);

```

- 

```
   th->mark_stack_len = argc = RARRAY_LENINT(ary);

   CHECK_STACK_OVERFLOW(th->cfp, argc);

```

# Index: include/ruby/ruby.h

— include/ruby/ruby.h (revision 23498)  
+++ include/ruby/ruby.h (working copy)  
@@ -664,4 +664,11 @@ struct RArray {  
RARRAY(a)-\>as.heap.ptr)

+#if SIZEOF\_LONG \> SIZEOF\_INT  
+int rb\_long2int(long);  
+#else  
+#define rb\_long2int(n) (int)(n)  
+#endif  
+#define RARRAY\_LENINT(ary) rb\_long2int(RARRAY\_LEN(ary))  
+  
struct RRegexp {  
struct RBasic basic;

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [May 20, 2009, 1:16pm UTC](https://www.ruby-forum.com/t/overflow-on-lp64/168405/2 "2009-05-20T13:16:25Z")

</div>

e$B$J$+$@$G$9!#e(B

At Wed, 20 May 2009 20:03:53 +0900,  
Nobuyoshi N. wrote in [ruby-dev:38508]:

> e$B0BA4$Ke(Blong-\>inte$B$N%-%c%9%H$r9T$&4X?t$rDI2C$9$k$N$,$$$$$N$G$O$J$$e(B  
> e$B0BA4$Ke(Blong-\>e$B$+$H;W$$$^$9!#e(B

fill-paragraphe$B$,e(Bprefixe$B$H8mG’$7$?$h$&$G$9!#A[A|$O$D$/$+$H;W$$$^$9e(B  
e$B$,!"@5$7$/$O0J2\<!#e(B

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [May 20, 2009, 4:08pm UTC](https://www.ruby-forum.com/t/overflow-on-lp64/168405/3 "2009-05-20T16:08:05Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:38508] overflow on LP64”  
on Wed, 20 May 2009 20:03:53 +0900, Nobuyoshi N.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

|e$B$H$-$I$-!“e(Blonge$B$+$ie(Binte$B$K0EL[$N$&$A$KJQ49$7$F$$$k$H$3$m$,$”$j$^$9!#e(B  
|e$B$[$H$s$I$N$H$3$m$O7?$r9g$o$;$k$@$1$G$b$9$`$N$G$9$,!“$?$H$($Pe(B  
|RARRAY\_LEN()e$B$J$I$+$ie(Brb\_funcall()e$B$J$I$r8F$S=P$7$F$$$k\>l9g!”\<B9T;~e(B  
|e$B$K%\*!\<%P!\<%U%m!\<$,5/$-$k2DG=@-$,$"$j$^$9!#e(B  
|  
|e$B0BA4$Ke(Blong-\>inte$B$N%-%c%9%H$r9T$&4X?t$rDI2C$9$k$N$,$$$$$N$G$O$J$$e(B  
|e$B$+$H;W$$$^$9!#e(B

e$B%3%\_%C%H$7$F$/$@$5$$!#B.EYDc2\<$O$_$$$_$$9M$($^$7$g$&!#e(B
