[#29911] [Bug #3231] Digest Does Not Build — Charlie Savage <redmine@...>

Bug #3231: Digest Does Not Build

19 messages 2010/05/01

[#29920] [Feature #3232] Loops (while/until) should return last statement value if any, like if/unless — Benoit Daloze <redmine@...>

Feature #3232: Loops (while/until) should return last statement value if any, like if/unless

9 messages 2010/05/01

[#29997] years in Time.utc — Xavier Noria <fxn@...>

Does anyone have a precise statement about the years supported by

13 messages 2010/05/04

[#30010] [Bug #3248] extension 'tk' is finding tclConfig.sh and tkConfig.sh incorrectly — Luis Lavena <redmine@...>

Bug #3248: extension 'tk' is finding tclConfig.sh and tkConfig.sh incorrectly

9 messages 2010/05/05

[#30226] [Bug #3288] Segmentation fault - activesupport-3.0.0.beta3/lib/active_support/callbacks.rb:88 — Szymon Jeż <redmine@...>

Bug #3288: Segmentation fault - activesupport-3.0.0.beta3/lib/active_support/callbacks.rb:88

10 messages 2010/05/13

[#30358] tk doesn't startup well in doze — Roger Pack <rogerdpack2@...>

Currently with 1.9.x and tk 8.5,the following occurs

12 messages 2010/05/22

[ruby-core:30246] [Bug #3297] [patch] Array#pack("i_") is broken in big endian 64bit systems

From: Klaus Kämpf <redmine@...>
Date: 2010-05-14 19:10:24 UTC
List: ruby-core #30246
Bug #3297: [patch] Array#pack("i_") is broken in big endian 64bit systems
http://redmine.ruby-lang.org/issues/show/3297

Author: Klaus K辰mpf
Status: Open, Priority: Normal
Category: core
ruby -v: ruby 1.8.7 (2008-08-11 patchlevel 72) [powerpc64-linux] 

See also http://redmine.ruby-lang.org/issues/show/1131 for a similar issue (String#unpack("V"))

Array#pack("i_") is broken in big endian 64 bit systems

irb> [1].pack("i_")
=> "\000\000\000\000"


The root cause is similar to the one of issue 1131, use of a wrong offset in a 64bit long.
But the fix is a bit simpler and is probably correct for all other architectures too.

According to the documentation, the "i" format of pack/unpack uses a fixed-size (32bit) integer, while adding "_" uses the system-size.
However, the implementation of Array#pack uses a 'long' type (64bit !) to store an intermediate value, thus breaking OFF() in accessing the wrong 4 bytes of the value.

Fix: Use 'int' to store the intermediate value (use of int is correct for the fixed-size as well as the system-size case) and don't use OFF()

With this patch, the pack_spec and unpack_spec tests of rubyspec.org run without issues.


----------------------------------------
http://redmine.ruby-lang.org

In This Thread

Prev Next