summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-10-12 05:14:23 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-10-12 05:14:23 +0000
commit6913b2734a80fab9dffea70f573555d96b45e226 (patch)
tree33bd484587e488a8c4ea452ac56dded278b0bb84
parent243831cd37bd6bb6504eba062c5b0e02bb69711f (diff)
* numeric.c (int_chr): a codepoint of Ruby M17N must be 32bit
unsigned int; GB18030 uses MSB. Also note that OnigCodePoint is defined as uisigned int. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29445 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--numeric.c6
-rw-r--r--test/ruby/test_m17n.rb1
3 files changed, 10 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 40fe442a36..ab6bb65da0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Tue Oct 12 14:04:41 2010 NARUSE, Yui <naruse@ruby-lang.org>
+
+ * numeric.c (int_chr): a codepoint of Ruby M17N must be 32bit
+ unsigned int; GB18030 uses MSB. Also note that OnigCodePoint
+ is defined as uisigned int.
+
Tue Oct 12 12:20:54 2010 NAKAMURA Usaku <usa@ruby-lang.org>
* vm_dump.c (dump_thread): foolish mistake.
diff --git a/numeric.c b/numeric.c
index 25c9e73e44..0f6d3dbb8c 100644
--- a/numeric.c
+++ b/numeric.c
@@ -2074,7 +2074,7 @@ int_chr(int argc, VALUE *argv, VALUE num)
{
char c;
int n;
- SIGNED_VALUE i = NUM2LONG(num);
+ uint32_t i = NUM2UINT(num);
rb_encoding *enc;
VALUE str;
@@ -2108,9 +2108,9 @@ int_chr(int argc, VALUE *argv, VALUE num)
#if SIZEOF_INT < SIZEOF_VALUE
if (i > UINT_MAX) goto out_of_range;
#endif
- if (i < 0 || (n = rb_enc_codelen((int)i, enc)) <= 0) goto out_of_range;
+ if (i < 0 || (n = rb_enc_codelen(i, enc)) <= 0) goto out_of_range;
str = rb_enc_str_new(0, n, enc);
- rb_enc_mbcput((int)i, RSTRING_PTR(str), enc);
+ rb_enc_mbcput(i, RSTRING_PTR(str), enc);
return str;
}
diff --git a/test/ruby/test_m17n.rb b/test/ruby/test_m17n.rb
index 07cda751d1..9f1419df7d 100644
--- a/test/ruby/test_m17n.rb
+++ b/test/ruby/test_m17n.rb
@@ -1139,6 +1139,7 @@ class TestM17N < Test::Unit::TestCase
0.upto(255) {|b|
assert_equal([b].pack("C"), b.chr)
}
+ assert_equal("\x84\x31\xA4\x39".force_encoding("GB18030"), 0x8431A439.chr("GB18030"))
end
def test_marshal