【问题标题】:Ruby Digest::SHA512.hexdigest throws a segment fault and quits in YosemiteRuby Digest::SHA512.hexdigest 在 Yosemite 中引发段错误并退出
【发布时间】:2015-07-09 06:11:10
【问题描述】:

我们有一个较旧的 REE rails 应用程序,我在 OSX Yosemite 的本地开发环境中工作。我最近从小牛队转会,我没有遇到任何问题。我第一次在我的新工作 mac 上运行这个应用程序,发现我无法登录,因为它抛出了一个段错误错误并退出了本地 webrick 服务器。经过一番调查,我找到了罪魁祸首:

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

...然后退出 ruby​​ 控制台。

ruby 版本 1.8.7 和 REE 在我的 OSX Yosemite 机器上都产生了这个问题。 Ruby 1.9.3 和更新版本似乎可以生成预期的哈希值而不会出错。

为什么在从 OSX Mavericks 切换到 Yosemite 后,Digest::SHA512.hexdigest 会产生 [BUG] Segmentation fault 错误?

【问题讨论】:

  • 这不是解决方案,但我的临时解决方法是在该行代码中将 512 更改为 256,以便我可以完成我的紧急任务而不必实际解决问题。请注意,使用 512 加密的任何内容都将不再匹配您现在加密的任何内容,但就我而言,我可以轻松重置密码并登录以继续开发。

标签: segmentation-fault rvm osx-yosemite ruby-1.8.7 ruby-enterprise-edition


【解决方案1】:

我在使用 ruby​​ 和 Max OS X Yosemite 的 ree-1.8.7-2012.02 版本时遇到了同样的问题,并且由于我在互联网上找到的所有解决方案都对我不起作用,经过一些测试后我找到了解决方案。

您只需将Digest::SHA512.hexdigest(digest) 更改为OpenSSL::Digest::SHA512.new(digest).hexdigest 即可。

这有点不方便,因为您必须更改整个应用程序的代码,但作为最后一个资源,它可以工作。

【讨论】:

  • 感谢这个解决方案,它让我头疼不已。但是,我不得不进入第三方 gem 并更改他们的代码(authlogic)。你知道有什么替代方案吗?
  • 我遇到这个问题的宝石也是 Authlogic!特别是 CryptoProviders::Authlogic::SHA512 类的加密方法。在他的日子里,我所做的只是改变了我的答案(在 gem 上更改代码作为临时解决方案),但我想通过装饰器你可以重新定义使用 OpenSSL::Digest::SHA512 的方法。如果您尝试并有效,请告诉我! :)
【解决方案2】:

解决方案:

您需要确保使用旧版本的 openssl 构建 ruby​​。

我将 0.9.8 openssl 下载到一个目录 (~/builds/openssl-0.9.8zg) 中,构建了它,但 NOT 安装了它。安装 ruby​​ 版本时,将 rvm 指向 openssl 0.9.8 目录

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

这对我有用,并且 rails 2.3.18 现在启动并在 Yosemite 下运行。

【讨论】:

    【解决方案3】:

    我没有答案,但有完全相同的问题。

    有趣的是,我正在从运行 Yosemite 的 Mac 转移到同样运行 Yosemite 的全新 Mac。旧的 mac 没有 seg 故障问题。 两台机器都在使用 Yosemite、rvm、ruby 1.8.7

    但我注意到“新 mac”使用 openssl 1.0.2c 2015 年 6 月 12 日,“旧 mac”使用 openssl 1.0.1c 2012 年 5 月 10 日

    这可能与正在编译的 SSL 库的版本有关吗?

    很抱歉没有提供答案,但认为这值得一提,以防万一。

    我正在继续调查,并将在此处报告任何成功。

    更新:

    '老苹果'

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

    报告 OpenSSL 0.9.8r 2011 年 2 月 8 日

    “新 mac”报告 OpenSSL 1.0.2c 2015 年 6 月 12 日

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多