openssl 1.1.0 or later対応の話


このエントリは https://qiita.com/advent-calendar/2017/mruby の10日目です。

あらすじ

趣味で、openssl 1.1.0をリンクしたとき、影響の出るmrbgemを調べていたのでそのことについて書きます。

depricate asn1_mac.h

mruby-acme-clientはOpenSSLを用いているのですが、asn1_mac.hが廃止され error プラグマが仕込まれたことにより、
ビルドが出来なくなる問題が起こりました。

解決策として、mruby-acme-clientがasn1_mac.hを直接使っていないため、削除するPRを出しています。

mruby-polarsslとmruby-base64

mruby-acme-clientのテストを実行するとmrbtestがSEGVする問題がありました。
これはOpenSSL 1.0.x系をリンクした時には発生しません。

詳細な再現手順はいまだ不明ですが、
mruby-polarsslが利用しているembedSSLが提供するbase64_encode
mruby-base64が実装しているbase64_encodeの解釈をランタイムで呼び間違えてしまう現象が起こったためです。

mruby-base64のbase64_encodeをstaticにすることによってSEGVが起こらないようになりました。

根本的な原因はまた別にありそうなのでちょっと調べてみます。

mruby 関係ない話

tlsextをdisableに出来なくなった関係でenable-tlsextというbuild optionがなくなります。
なのでtls拡張を用いるmrbgemでCIがfailするようになります。

まとめ

主にlinuxで試したので次はwindows系のmrbgemを試したいと思います。

P.S

library resolvのAPI設計とDNS formatの複雑さがやばくてresolvの進捗は霞に消えた。