[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