3

У нас есть более раннее приложение REE rails, которое я работаю в локальной локальной среде в OSX Yosemite. Недавно я переключился с Маверикс, с которым у меня не было проблем. Я впервые запустил это приложение на своем новом рабочем маке и обнаружил, что не смог войти в систему из-за того, что он сбросил ошибку ошибки сегмента и вышел из локального сервера webrick. После некоторого исследования, я нашел виновника:Ruby Digest :: SHA512.hexdigest выдает ошибку сегмента и завершает работу в Yosemite

digest = Digest::SHA512.hexdigest('some_arbitrary_value') 

О дальнейшем исследовании, я обнаружил, что эта строка кода выдает следующее сообщение об ошибке:

[BUG] Segmentation fault 
ruby 1.8.7 (2013-06-27 MBARI 8/0x6770 on patchlevel 374) [i686-darwin14.3.0], MBARI 0x6770, Ruby Enterprise Edition 2012.02 

... и выходит консоль рубиновый.

Оба варианта рубинов 1.8.7 и REE производят эту проблему на моей машине OSX Yosemite. Ruby версии 1.9.3 и новее, похоже, производят ожидаемый хеш без ошибок.

Почему Digest::SHA512.hexdigest производит ошибку [BUG] Segmentation fault после переключения с OSX Mavericks на Yosemite?

+0

Это не решение, но мое временное обходное решение для этого, чтобы я мог выполнить свою неотложную задачу без фактического решения проблемы, - это изменить 512 на 256 в этой строке кода. Обратите внимание, что все, что зашифровано с 512, больше не будет соответствовать тому, что вы зашифруете сейчас, но в моем случае я мог бы легко сбросить пароль и логин, чтобы продолжить разработку. – cesoid

ответ

0

У меня нет ответа, но у вас точно такая же проблема.

Интересно, что я перехожу от Mac, работающего на Yosemite, к совершенно новому Mac, также работающему с Yosemite. У старого mac нет ошибки seg fault. Обе машины используют Йосемити, RVM, рубин 1.8.7

Но я заметил, что «новый макинтош» использует OpenSSL 1.0.2c 12 июня 2015 и «старый макинтош» использует OpenSSL 1.0.1c 10 мая 2012

Может ли это быть связано с тем, как скомпилирована версия библиотек SSL?

Извините, что не дал ответа, но подумал, что стоит упомянуть, если это поможет.

Я продолжаю расследование и сообщаю об успехах здесь.

Update:

'Old Mac'

ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION' 

сообщает OpenSSL 0.9.8r 8 фев 2011

'новый макинтош' сообщает OpenSSL 1.0.2c 12 июня 2015

1

Solution :

Вам необходимо убедиться, что рубин построен с использованием старой версии ope NSSL.

Я загрузил 0.9.8 openssl в каталог (~/builds/openssl-0.9.8zg), построил его, но сделал NOT установить его. При установке версии рубина, точка РВМ в OpenSSL 0.9.8 каталога

rvm reinstall 1.8.7-p374 --autolibs=0 --with-openssl=~/builds/openssl-0.9.8zg 

Это работает для меня и рельсов 2.3.18 в настоящее время запускает и работает под Йосемитью.

6

У меня была такая же проблема с версией ree-1.8.7-2012.02 рубинов и Max OS X Yosemite, и поскольку все решения, которые я нашел в Интернете, не работают для меня, после некоторых тестов я нашел решение.

Вам нужно только изменить Digest::SHA512.hexdigest(digest) на номер OpenSSL::Digest::SHA512.new(digest).hexdigest, и он будет работать нормально.

Это немного неудобство, потому что вам нужно изменить код по всему вашему приложению, но в качестве последнего ресурса он работает.

+0

Спасибо за это решение, это избавило меня от серьезной головной боли. Но мне пришлось пойти в сторонний драгоценный камень и изменить свой код (authlogic). Есть ли альтернатива этому, о котором вы знаете? – userFriendly

+0

Драгоценный камень, с которым у меня была эта проблема, был Authlogic тоже! В частности, с помощью метода шифрования класса CryptoProviders :: Authlogic :: SHA512. В свое время я сделал не что иное, как изменение в своем ответе (изменение на камне кода как временного решения), но я думаю, что через декоратор вы можете переопределить метод использования OpenSSL :: Digest :: SHA512. Если вы попробуете и работаете, дайте мне знать! :) –

Смежные вопросы