[macruby-changes] [5094] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Sat Jan 1 20:05:16 PST 2011


Revision: 5094
          http://trac.macosforge.org/projects/ruby/changeset/5094
Author:   watson1978 at gmail.com
Date:     2011-01-01 20:05:12 -0800 (Sat, 01 Jan 2011)
Log Message:
-----------
will throw an exception when was passed very large index into rary_store. fixed a #1087.

Modified Paths:
--------------
    MacRuby/trunk/NSArray.m
    MacRuby/trunk/array.c
    MacRuby/trunk/array.h

Modified: MacRuby/trunk/NSArray.m
===================================================================
--- MacRuby/trunk/NSArray.m	2010-12-30 09:59:48 UTC (rev 5093)
+++ MacRuby/trunk/NSArray.m	2011-01-02 04:05:12 UTC (rev 5094)
@@ -217,6 +217,9 @@
 		    idx - len);
 	}
     }
+    else if (idx >= ARY_MAX_SIZE) {
+	rb_raise(rb_eIndexError, "index %ld too big", idx);
+    }
 
     CHECK_MUTABLE(ary);
 

Modified: MacRuby/trunk/array.c
===================================================================
--- MacRuby/trunk/array.c	2010-12-30 09:59:48 UTC (rev 5093)
+++ MacRuby/trunk/array.c	2011-01-02 04:05:12 UTC (rev 5094)
@@ -167,7 +167,7 @@
     if (len < 0) {
 	rb_raise(rb_eArgError, "negative array size (or size too big)");
     }
-    if ((unsigned long)len > (LONG_MAX / sizeof(VALUE))) {
+    if ((unsigned long)len > ARY_MAX_SIZE) {
 	rb_raise(rb_eArgError, "array size too big");
     }
 }

Modified: MacRuby/trunk/array.h
===================================================================
--- MacRuby/trunk/array.h	2010-12-30 09:59:48 UTC (rev 5093)
+++ MacRuby/trunk/array.h	2011-01-02 04:05:12 UTC (rev 5094)
@@ -21,6 +21,7 @@
     VALUE *elements;
 } rb_ary_t;
 
+#define ARY_MAX_SIZE (LONG_MAX / (int)sizeof(VALUE))
 #define RARY(x) ((rb_ary_t *)x)
 
 static inline bool
@@ -101,6 +102,10 @@
                     idx - len);
         }
     }
+    else if (idx >= ARY_MAX_SIZE) {
+	rb_raise(rb_eIndexError, "index %ld too big", idx);
+    }
+
     size_t uidx = (size_t)idx;
     if (uidx >= RARY(ary)->len) {
         rary_reserve(ary, uidx + 1);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20110101/88b8fc7e/attachment.html>


More information about the macruby-changes mailing list