Skip to content

parse: パースエラーログに生のenv値を出力しない (#20)#25

Merged
ieee0824 merged 1 commit into
masterfrom
fix/parse-log-no-raw-value
Jun 17, 2026
Merged

parse: パースエラーログに生のenv値を出力しない (#20)#25
ieee0824 merged 1 commit into
masterfrom
fix/parse-log-no-raw-value

Conversation

@ieee0824

Copy link
Copy Markdown
Owner

概要

パースエラー時のログに、生の環境変数値が漏れないよう修正します。

Closes #20

背景と落とし穴

Int* はパースエラー時に生の env 値を log.Printf("parse error: input: %v, ...", v, ...) で出力していました(#20)。

ただし issue #20 が提案していた素朴な修正 log.Printf("...%q as int: %v", key, err)不十分です。strconv / time.ParseDurationエラーメッセージ自体が入力値を埋め込むため(例: strconv.ParseInt: parsing "<生値>": invalid syntax)、%v err でそのまま漏れます。

同じ理由で、#17 で Duration に追加した env パース失敗ログ(time: invalid duration "<生値>")も生値を漏らしていました。本 PR で両方まとめて潰します。

変更点

  • Int / Int32 / Int64 / Int16: strconv.NumError から値を含まない理由のみ(invalid syntax / value out of range)を抽出する parseErrReason を導入。生値も生エラー文字列も出力しない(Int*: パースエラー時に生のenv値をログ出力しない #20)
    • 例: getenv: failed to parse "PORT" as int: invalid syntax(生値なし、理由は保持)
  • Duration(env 側): time エラーは値なし理由を構造的に取得できないため、キー名のみログ出力
    • 例: getenv: failed to parse value for "TIMEOUT" as duration
  • デフォルト値のログ(開発者定数で秘密でない)は従来どおり

テスト

  • int_test.go 新規: 全 Int 系で「生値が出ない / キーが出る / 理由(invalid syntax)が出る / デフォルトにフォールバック」を検証(この回帰テストは素朴な修正なら失敗します)
  • duration_test.go: env パース失敗で生値が出ないことを検証 + gofmt 整形
  • go build / go vet / go test / go test -race すべて ✅

🤖 Generated with Claude Code

## 理由
Int* はパースエラー時に生の env 値を log 出力していた(#20)。加えて、
strconv / time.ParseDuration のエラーメッセージ自体が入力値を埋め込むため、
単に "%v err" を出すだけでは依然として生値が漏れる。Duration の env パース
失敗ログ(#17 で追加)も同じ理由で生値を漏らしていた。数値想定の変数に機微値が
誤設定された場合に、その値がログに残るのを防ぐ。

## 修正点
- Int / Int32 / Int64 / Int16: strconv.NumError から値を含まない理由のみ
  (invalid syntax / value out of range)を抽出する parseErrReason を導入し、
  生値・生エラーを出力しないように変更(#20)
- Duration(env 側): time エラーは値なし理由を構造的に取得できないため、
  キー名のみをログ出力するよう変更
- int_test.go を追加(全 Int 系で生値非出力・キー出力・理由出力を検証)
- duration_test.go に生値非出力の回帰テストを追加し gofmt 整形
@ieee0824 ieee0824 merged commit 0d4a0d3 into master Jun 17, 2026
1 check passed
@ieee0824 ieee0824 deleted the fix/parse-log-no-raw-value branch June 17, 2026 06:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Int*: パースエラー時に生のenv値をログ出力しない

1 participant