cli-plugins/hooks: max-message enforcement is off by one

オープン 初心者向け
#7,005 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
74/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
静か
技術スタック
go
領域
cli

調査の方向性

cli-plugins/hooks/template.go の 43 行目と 46 行目から始め、issue にある 11 行の再現コードを使って hooks.ParseTemplate() を調査します。10 個の改行文字が拒否される一方で、10 メッセージの上限以内の出力は有効なままであることを示す回帰テストを追加します。完了の条件は、余分な行が最終メッセージに結合されないことです。

索引モデルが issue の本文から書いたものです。

説明

Description

cli-plugins/hooks.ParseTemplate() currently enforces maxMessages = 10 by counting newline characters and rejecting only when strings.Count(out, "\n") > maxMessages, then returning strings.SplitN(out, "\n", maxMessages).

That makes the limit off by one:

  • a template that renders to 10 newline characters actually contains 11 messages
  • that output is currently accepted instead of rejected
  • SplitN(..., 10) then merges the extra line into the last returned element, so the final "message" can still contain an embedded newline

This means the "maximum 10 messages" guard can be bypassed by one extra rendered line.

Reproduce
  1. Use the current master branch.
  2. Call hooks.ParseTemplate() with output that contains 11 lines, for example:
strings.Repeat("line\n", 10) + "line"
  1. Observe that no error is returned.
  2. Observe that the returned slice has length 10, with the last element containing an embedded newline.

The relevant logic is currently in:

  • cli-plugins/hooks/template.go:43
  • cli-plugins/hooks/template.go:46
Expected behavior

A template that renders to more than 10 messages should be rejected, including the 11-line / 10-newline case.

In other words, the limit should be enforced on the number of returned messages, not just on the number of newline separators.

docker version

N/A for runtime environment. This is a source-level issue in the current master branch checkout.

Observed in local checkout at 9f16882de4.

docker info

N/A for runtime environment. This issue is in template parsing logic and does not depend on daemon configuration.

Additional Info

This looks like it was introduced by b7ab63387a (cli-plugins/hooks: limit maximum number of lines / messages).

I’m happy to send a fix with a regression test if this behavior matches the intended bug report.

主要言語
Go
スター
6.1k
フォーク
2.2k
平均マージ
1日 15時間
マージ済み PR(30日)
43

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

docker/cli のほかの issue

docker/cli の issue をすべて見る

似ている issue

Go の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。