Projects

Ticket #809 (closed defect: fixed)

Opened 19 months ago

Last modified 19 months ago

Bus error doing cipher encryption with OpenSSL

Reported by: pwilson@… Owned by: lsansonetti@…
Priority: blocker Milestone: MacRuby 0.7
Component: MacRuby Keywords:
Cc:

Description

Using the nightly build dated July 21 on Mac OS X 10.6.4, when I try to apply a cipher encryption to a string, I get either a bus error or an assertion failure, depending on the length of the string. Here's the code:

require 'openssl'

message1 = "Encrypt me."                     #  Generates assertion failure
message2 = "Encrypt a longer string."        #  Generates bus error

# Encrypt with 256 bit AES with CBC
cipher = OpenSSL::Cipher::Cipher.new('aes-256-cbc')
cipher.encrypt

# Generate random keys and IVs
cipher.key = cipher.random_key
cipher.iv  = cipher.random_iv

#  Encrypt the data
encrypted_data = cipher.update(message1)
encrypted_data << cipher.final

When encrypting the first string (message1), I get this assertion failure:

Assertion failed: (out_len < RSTRING_LEN(str)), function ossl_cipher_update, file ossl_cipher.c, line 334.

When encrypting the second string (message2), I get a bus error with this stack trace:

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x0000000100972d60
0x00007fff844c66d8 in AES_cbc_encrypt ()
(gdb) bt
#0  0x00007fff844c66d8 in AES_cbc_encrypt ()
#1  0x00007fff844cabf3 in aes_256_cbc_cipher ()
#2  0x00007fff844a64a4 in EVP_EncryptUpdate ()
#3  0x00007fff844a667f in EVP_CipherUpdate ()
#4  0x0000000103da8d3a in ossl_cipher_update ()
#5  0x00000001001409d9 in rb_vm_dispatch ()
#6  0x0000000103d00950 in ?? ()
#7  0x0000000103d00220 in ?? ()
#8  0x000000010014d688 in rb_vm_run ()
#9  0x00000001000401f0 in ruby_run_node ()
#10 0x0000000100000d28 in main ()

This code works under both ruby 1.8.7 and ruby 1.9.2(RC1).

Change History

Changed 19 months ago by lsansonetti@…

  • status changed from new to closed
  • resolution set to fixed

Should be fixed in r4373.

Note: See TracTickets for help on using tickets.