ruby-trunk-changes r55229 - r55249

今日は String#crypt で使っている crypt(3) の利用に関する一連の変更と、拡張ライブラリ openssl の 2038年問題対応がありました。

rhe: r55229 2016-05-31 23:10:11 +0900

r55219 の openssl の修正についてのテストを追加しています。 [ruby-core:45552] [Bug #6571]

nobu: r55230 2016-06-01 01:49:30 +0900

missing/crypt.c の static 変数に const 修飾子を付加しています。

svn: r55231 2016-06-01 01:49:30 +0900

version.h の日付更新。

nobu: r55232 2016-06-01 01:49:32 +0900

missing/crypt.c の変数宣言が型が明記されてないやつだったのでちゃんと型を書くようにしています。なんか久しぶりにこういう宣言を見た気がしますね。また一部の関数から不要な戻り値をなくして、呼び元での分岐も削除しています。

nobu: r55233 2016-06-01 02:25:40 +0900

さらに missing/crypt.c から cray とか convex とかのマクロで分岐していたのを(cray!?) SIZEOF_XXX をチェックするなど変数の型のサイズのチェックに修正しています。 cygwin でテストが失敗していたそうです。 [ruby-core:75792] [Bug #12446]

nobu: r55234 2016-06-01 09:14:32 +0900

missing/crypt.c に static 変数として持っていた中間データをまとめて構造体にして関数呼び出しごとに保有させるようにして、crypt_r(), setkey_r(), encrypt_r() などの再入可能なバージョンの関数群を定義しています。

nobu: r55235 2016-06-01 09:16:24 +0900

missing/crypt.c から構造体宣言やマクロ定義を crypt.h に分離しています。

usa: r55236 2016-06-01 09:37:54 +0900

missing/crypt.c で void 型にした関数内で return を使っていたのを削除しています。

nobu: r55237 2016-06-01 09:48:08 +0900

missing/crypt.c を missing/crypt_r.c に移動して String#crypt で crypt_r(3) を利用するように変更しています。

nobu: r55238 2016-06-01 09:52:59 +0900

missing/crypt_r.c のインデントなどスタイルの修正。

usa: r55239 2016-06-01 11:35:36 +0900

r55237 の crypt_r() 利用で Windows 向けのビルドがエラーになったので win32/Makefile.sub を修正しています。

nobu: r55240 2016-06-01 11:45:20 +0900

string.o から crypt.h への依存関係を追加しています。

nobu: r55241 2016-06-01 13:20:40 +0900

missing/crypt_r.c の変数の const 修飾子追加と不要になった関数の削除など。

nobu: r55242 2016-06-01 14:00:55 +0900

crypt.h から DES のテーブルの定義を missing/crypt_r.c に移動しています。

nobu: r55243 2016-06-01 14:07:55 +0900

missing/crypt_r.c の a64toi() で 8bit 目が立ってる時に不正アクセスする不具合があったのを修正しています。

nobu: r55244 2016-06-01 15:05:21 +0900

missing/crypt_r.c から DES 用のテーブル部分を #ifdef でコメントアウトして missing/des_tables.c というファイルに切り出しています。 missing/crypt_r.c に #ifdef DUMP で追加されているコードはこの des_tables.c を生成するためのコードみたいですね。

nobu: r55245 2016-06-01 15:58:21 +0900

r55237 を revert して missing/crypt.c を復活させて String#crypt で crypt_r() を使うのをやめて、configure で crypt(3) が salt に 8bit 目が立っているバイト列を渡すと結果がおかしくなる不具合を検出して、その場合には salt の 8bit 目を落として使うようにしています。

naruse: r55246 2016-06-01 19:05:55 +0900

configure での crypt_r(3) のチェックを削っています。

nobu: r55247 2016-06-01 19:24:10 +0900

crypt.h を missing/crypt.h に移動しています。system header との競合を避けるため。

nobu: r55248 2016-06-01 19:42:45 +0900

r55246 を revert して configure での crypt_r() のチェックを復活させています。

rhe: r55249 2016-06-01 21:41:15 +0900

r55219 で拡張ライブラリ openssl の ASN1 のコードで time_t 型の変換の修正がありましたが、そもそも OpenSSL の ASN1_TIME_set() では 32bit の壁を超えることができず 2038年問題があったので ASN1_TIME_adj() や X509_time_adj_ex() が利用できる時はこちらに対応するようにしています。 [ruby-core:45552] [Bug #6571]