[#35631] [Ruby 1.9 - Bug #4558][Open] TestSocket#test_closed_read fails after r31230 — Tomoyuki Chikanaga <redmine@...>

23 messages 2011/04/06

[#35632] [Ruby 1.9 - Bug #4559][Open] Proc#== does not match the documented behaviour — Adam Prescott <redmine@...>

13 messages 2011/04/06

[#35637] [Ruby 1.9 - Bug #4561][Open] 1.9.2 requires parentheses around argument of method call in an array, where 1.8.7 did not — Dave Schweisguth <redmine@...>

9 messages 2011/04/07

[#35666] caching of the ancestor chain — Xavier Noria <fxn@...>

Why does Ruby cache the ancestors chain? I mean, not why the implementation implies that, but why it works that way conceptually.

9 messages 2011/04/09

[#35734] [Ruby 1.9 - Feature #4574][Open] Numeric#within — redmine@...

16 messages 2011/04/13

[#35753] [Ruby 1.9 - Bug #4576][Open] Range#step miss the last value, if end-exclusive and has float number — redmine@...

61 messages 2011/04/14
[#39566] [Ruby 1.9 - Bug #4576] Range#step miss the last value, if end-exclusive and has float number — Marc-Andre Lafortune <ruby-core@...> 2011/09/15

[#39590] [Ruby 1.9 - Bug #4576] Range#step miss the last value, if end-exclusive and has float number — Marc-Andre Lafortune <ruby-core@...> 2011/09/16

[#39593] Re: [Ruby 1.9 - Bug #4576] Range#step miss the last value, if end-exclusive and has float number — Tanaka Akira <akr@...> 2011/09/16

2011/9/17 Marc-Andre Lafortune <ruby-core@marc-andre.ca>:

[#39608] Re: [Ruby 1.9 - Bug #4576] Range#step miss the last value, if end-exclusive and has float number — Masahiro TANAKA <masa16.tanaka@...> 2011/09/17

I have not been watching ruby-core, but let me give a comment for this issue.

[#35765] [Ruby 1.9 - Bug #4579][Open] SecureRandom + OpenSSL may repeat with fork — redmine@...

27 messages 2011/04/15

[#35866] [Ruby 1.9 - Bug #4603][Open] lib/csv.rb: when the :encoding parameter is not provided, the encoding of CSV data is treated as ASCII-8BIT — yu nobuoka <nobuoka@...>

13 messages 2011/04/24

[#35879] [Ruby 1.9 - Bug #4610][Open] Proc#curry behavior is inconsistent with lambdas containing default argument values — Joshua Ballanco <jballanc@...>

11 messages 2011/04/25

[#35883] [Ruby 1.9 - Bug #4611][Open] [BUG] Segementation fault reported — Deryl Doucette <me@...>

15 messages 2011/04/25

[#35895] [Ruby 1.9 - Feature #4614][Open] [RFC/PATCH] thread_pthread.c: lower RUBY_STACK_MIN_LIMIT to 64K — Eric Wong <normalperson@...>

10 messages 2011/04/25

[ruby-core:35814] [Ruby 1.9 - Bug #4320] Bus Error in digest/sha2 on sparc

From: redmine@...
Date: 2011-04-19 14:49:43 UTC
List: ruby-core #35814
Issue #4320 has been updated by Nils Goroll.

File ruby_issue_4320__digest_sha2_alignment.patch added

I'll attach a proposed fix:

* make ((|context->buffer|)) an array of the type being expected by (({SHAXXX_Transform})) (rather than a byte array), so our compiler will align it, if necessary
* remove now unneeded casts when passing the buffer to (({SHAXXX_Transform}))
* use a cast-to-uint8 version of the buffer for byte access

the actual fix:

* for platforms which are not known to accept unaligned access to words (conditions taken from ((%regint.h%))), use existing buffering code in (({SHAXXX_Update})) to align data by copying

I am not too happy about the (({PLAT_NEED_ALIGNED_WORD_ACCESS})), it appears to me that checking architecture alignment requirements should be done in ((%autoconf%)) or similar. Also, the simplistic (({ALIGNOF()})) macro will not return the minimal alignment requirement, but rather the alignment the compiler has chosen for a struct (which may be more than minimal).

At any rate, the patch does the job.

=== Test

I've done basic regression testing by

* comparing the output of the following commands between x86 with unpatched 1.8.7-p175 i386-solaris2.11 and patched 1.9.2-p180:

 ruby -e "require 'digest/sha2'; 1.upto(2*90+20) { |i| 1.upto(2*90+20) { |j| d= Digest::SHA256.new; p i.to_s+' '+j.to_s; ['a' * i, 'b' * j].each {|c| d.update(c)}; p d}}" >/tmp/sha_256.out &
 ruby -e "require 'digest/sha2'; 1.upto(2*90+20) { |i| 1.upto(2*90+20) { |j| d= Digest::SHA512.new; p i.to_s+' '+j.to_s; ['a' * i, 'b' * j].each {|c| d.update(c)}; p d}}" >/tmp/sha_512.out &

* checksumming the contents of Solaris 10 SPARC ((%/usr/bin%)) with the vesions given above usind:

 find . -type f | ruby -e "require 'digest/sha2'; ARGF.each_line { |fname| fname = fname.chomp; begin; p fname+': '+Digest::SHA256.file(fname).hexdigest; rescue; end; } " >/tmp/ruby_hash_n

So I presume SHA2 is working OK.

((%make check%)) returns

 8063 tests, 1870484 assertions, 21 failures, 35 errors, 2 skips

but none of the failures/errors is related to digest.
----------------------------------------
Bug #4320: Bus Error in digest/sha2 on sparc
http://redmine.ruby-lang.org/issues/4320

Author: Meik Nienaber
Status: Assigned
Priority: Normal
Assignee: Akinori MUSHA
Category: 
Target version: 1.9.2
ruby -v: ruby 1.9.2p136 (2010-12-25 revision 30365) [sparc-solaris2.10]


 Most likely this is caused due to misaligned memory. Any comment is greatly appreciated.
 
 This bug can reproduce at Ruby 1.8, too.
 
 ruby -e "require 'digest/sha2'; d= Digest::SHA256.new; ['a' * 97, 'a' * 97].each {|i| d.update(i)}; p d"
 -e:1: [BUG] Bus Error
 ruby 1.9.2p136 (2010-12-25 revision 30365) [sparc-solaris2.10]
 
 -- control frame ----------
 c:0007 p:---- s:0019 b:0019 l:000018 d:000018 CFUNC  :update
 c:0006 p:0014 s:0015 b:0015 l:0015ac d:000014 BLOCK  -e:1
 c:0005 p:---- s:0012 b:0012 l:000011 d:000011 FINISH
 c:0004 p:---- s:0010 b:0010 l:000009 d:000009 CFUNC  :each
 c:0003 p:0054 s:0007 b:0007 l:0015ac d:000ed0 EVAL   -e:1
 c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH
 c:0001 p:0000 s:0002 b:0002 l:0015ac d:0015ac TOP


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

In This Thread

Prev Next