Go 1.7.4 and Go 1.6.4
[security] Go 1.7.4 and Go 1.6.4 are released(google groups)
Go 1.7.4 と 1.6.4 が security fix としてリリースされたので内容を確認してみた。
修正は2点。
crypto/x509
- osxの証明書に関する問題
- ユーザの設定でroot証明書を信頼しないように設定していても、go側は信頼してしまうとのこと
- 修正コミットを見ると、
- cgo が使える場合は Core Foundation の API を使って
- cgo が使えない場合は外部コマンドの
/usr/bin/security
を呼び出して
- 厳密に検証するようになっていた
net/http
Request.ParseMultipartForm
利用時、リクエストがmaxMemory
を超える場合に起きる問題- ファイルディスクリプタを大量消費される可能性があるとのこと
- 修正コミットを見ると、
defer
で実施していたfile.Close()
をdefer
を使わないように変更されていた- もとは https://github.com/golang/go/issues/16296 で報告されているように、windowsにおいてclose前のファイルを削除できないという問題から(multipartは一時的にファイルシステムに保存している)
- この処理は
for
でループしているので、関数が抜けるまでループ内で発生したすべてのClose
が遅延処理される - ループ回数が多いほどこの処理内でディスクリプタ消費を消費していた
以上、該当APIを利用している場合はサクッと上げてしまうのが良さそう。
defer
の修正は一般的にも気をつけたほうが良い話で、ループ内でのdefer
利用は計画的にと再確認した。