summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--numeric.c11
2 files changed, 14 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index add179b06e..cf7d30b7d6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Wed Oct 13 21:13:00 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * numeric.c (int_chr): raise error when the value is negative.
+
Wed Oct 13 19:24:08 2010 URABE Shyouhei <shyouhei@ruby-lang.org>
* vm.c (ruby_vm_destruct): This function type was wrong; correct to the prototype.
diff --git a/numeric.c b/numeric.c
index c27187f4f4..26ce683daa 100644
--- a/numeric.c
+++ b/numeric.c
@@ -2120,9 +2120,18 @@ static VALUE
int_chr(int argc, VALUE *argv, VALUE num)
{
char c;
- unsigned int i = NUM2UINT(num);
+ unsigned int i;
rb_encoding *enc;
+ if (rb_num_to_uint(num, &i) == 0) {
+ }
+ else if (FIXNUM_P(num)) {
+ rb_raise(rb_eRangeError, "%ld out of char range", FIX2LONG(num));
+ }
+ else {
+ rb_raise(rb_eRangeError, "bignum out of char range");
+ }
+
switch (argc) {
case 0:
if (0xff < i) {