読者です 読者をやめる 読者になる 読者になる

隙あらば寝る

うぇぶのかいしゃではたらくえんじにあがかいています

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点。

  1. crypto/x509

    • osxの証明書に関する問題
    • ユーザの設定でroot証明書を信頼しないように設定していても、go側は信頼してしまうとのこと
    • 修正コミットを見ると、
      • cgo が使える場合は Core FoundationAPI を使って
      • cgo が使えない場合は外部コマンドの /usr/bin/security を呼び出して
    • 厳密に検証するようになっていた
  2. net/http

    • Request.ParseMultipartForm利用時、リクエストがmaxMemoryを超える場合に起きる問題
    • ファイルディスクリプタを大量消費される可能性があるとのこと
    • 修正コミットを見ると、deferで実施していたfile.Close()deferを使わないように変更されていた
      • もとは https://github.com/golang/go/issues/16296 で報告されているように、windowsにおいてclose前のファイルを削除できないという問題から(multipartは一時的にファイルシステムに保存している)
      • この処理はforでループしているので、関数が抜けるまでループ内で発生したすべてのCloseが遅延処理される
      • ループ回数が多いほどこの処理内でディスクリプタ消費を消費していた

以上、該当APIを利用している場合はサクッと上げてしまうのが良さそう。

deferの修正は一般的にも気をつけたほうが良い話で、ループ内でのdefer利用は計画的にと再確認した。