From: Hiroshi Nakamura Date: 2011-07-15T01:05:31+09:00 Subject: [ruby-core:38066] [Ruby 1.9 - Bug #4320] Bus Error in digest/sha2 on sparc Issue #4320 has been updated by Hiroshi Nakamura. This looks much simpler. I'll check this patch tomorrow. Index: ext/digest/sha2/sha2.c =================================================================== --- ext/digest/sha2/sha2.c (revision 32536) +++ ext/digest/sha2/sha2.c (working copy) @@ -559,7 +559,8 @@ } while (len >= SHA256_BLOCK_LENGTH) { /* Process as many complete blocks as we can */ - SHA256_Transform(context, (sha2_word32*)data); + MEMCPY_BCOPY(context->buffer, data, SHA256_BLOCK_LENGTH); + SHA256_Transform(context, (sha2_word32*)context->buffer); context->bitcount += SHA256_BLOCK_LENGTH << 3; len -= SHA256_BLOCK_LENGTH; data += SHA256_BLOCK_LENGTH; @@ -880,7 +881,8 @@ } while (len >= SHA512_BLOCK_LENGTH) { /* Process as many complete blocks as we can */ - SHA512_Transform(context, (sha2_word64*)data); + MEMCPY_BCOPY(context->buffer, data, SHA512_BLOCK_LENGTH); + SHA512_Transform(context, (sha2_word64*)context->buffer); ADDINC128(context->bitcount, SHA512_BLOCK_LENGTH << 3); len -= SHA512_BLOCK_LENGTH; data += SHA512_BLOCK_LENGTH; ---------------------------------------- Bug #4320: Bus Error in digest/sha2 on sparc http://redmine.ruby-lang.org/issues/4320 Author: Meik Nienaber Status: Assigned Priority: Normal Assignee: Hiroshi Nakamura Category: Target version: 1.9.3 ruby -v: ruby 1.9.2p136 (2010-12-25 revision 30365) [sparc-solaris2.10] =begin 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 =end -- http://redmine.ruby-lang.org