Value.Patch: "add" with an out-of-range array index appends instead of failing

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

@SashaMIT がすでに取り組んでいます。

2026年10月12日 から。

  • #53 @RaphaelFakhri による — マージされずにクローズ
  • #55 @SashaMIT による — オープン

評価

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

調査の方向性

patch.go で patchAdd と find を読んでから始め、レポートにある Go の例で問題を再現してください。利用可能であれば、既存の patch 関連テストを確認してください。add 操作で配列の長さより大きいインデックスを指定した場合にエラーを返して配列を変更せず、長さと等しいインデックスと - トークンの場合は引き続き末尾に追加されれば完了です。

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

説明

What happened

An add operation whose array index is greater than the array length succeeds and appends the value.

v, _ := hujson.Parse([]byte(`[1,2]`))
err := v.Patch([]byte(`[{"op":"add","path":"/5","value":3}]`))
fmt.Println(err, string(v.Pack()))
// <nil> [1,2,3]

What you expected

RFC 6902, section 4.1 states that the index of an add on an array must not be greater than the number of elements. The patch should fail with an error and leave the array unchanged. Indexes equal to the length and the - token continue to append.

Cause

patchAdd in patch.go accepts any errNotFound from find as an insertion point. For arrays, find reports the array length as the index for every missing index, so /5 is treated the same as /2 or /-.

主要言語
Go
スター
892
フォーク
40
PR マージ指標
30日以内にマージされた PR はありません

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

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

tailscale/hujson のほかの issue

tailscale/hujson の issue をすべて見る

似ている issue

Go の issue をもっと見る

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

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