diff --git a/ChangeLog b/ChangeLog index 955051a6eb..10a7922520 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Fri Oct 15 16:40:37 2010 NARUSE, Yui + + * pack.c (pack_pack): fix more than one modifiers appear in the + format string. [ruby-core:32793] + + * pack.c (pack_unpack): ditto. + Thu Oct 14 23:20:42 2010 Masaki Suketa * test/win32ole/test_folderitem2_invokeverb.rb: refactoring. diff --git a/pack.c b/pack.c index 8c710f9622..45a5de0d4f 100644 --- a/pack.c +++ b/pack.c @@ -428,7 +428,6 @@ pack_pack(VALUE ary, VALUE fmt) int natint; /* native integer */ #endif int signed_p, integer_size, bigendian_p; - int explicit_endian = 0; StringValue(fmt); p = RSTRING_PTR(fmt); @@ -443,6 +442,7 @@ pack_pack(VALUE ary, VALUE fmt) #define NEXTFROM (items-- > 0 ? RARRAY_PTR(ary)[idx++] : TOO_FEW) while (p < pend) { + int explicit_endian = 0; if (RSTRING_PTR(fmt) + RSTRING_LEN(fmt) != pend) { rb_raise(rb_eRuntimeError, "format string modified"); } @@ -1366,7 +1366,6 @@ pack_unpack(VALUE str, VALUE fmt) #endif int block_p = rb_block_given_p(); int signed_p, integer_size, bigendian_p; - int explicit_endian = 0; #define UNPACK_PUSH(item) do {\ VALUE item_val = (item);\ if (block_p) {\ @@ -1386,6 +1385,7 @@ pack_unpack(VALUE str, VALUE fmt) ary = block_p ? Qnil : rb_ary_new(); while (p < pend) { + int explicit_endian = 0; type = *p++; #ifdef NATINT_PACK natint = 0; diff --git a/test/ruby/test_pack.rb b/test/ruby/test_pack.rb index 6f746f2596..83b4582776 100644 --- a/test/ruby/test_pack.rb +++ b/test/ruby/test_pack.rb @@ -145,6 +145,8 @@ class TestPack < Test::Unit::TestCase else _integer_little_endian() end + assert_equal("\x01\x02\x02\x01", [0x0102,0x0102].pack("s>s<")) + assert_equal([0x0102,0x0102], "\x01\x02\x02\x01".unpack("s>s<")) end def test_integer_endian_explicit