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

Đang mở Phù hợp với người mới
#52 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

@SashaMIT đang làm issue này rồi.

Từ ngày 12/10/2026.

  • #53 của @RaphaelFakhri — đã đóng, không merge
  • #55 của @SashaMIT — đang mở

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
78/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
go
Lĩnh vực
backend

Hướng nghiên cứu

Bắt đầu trong patch.go bằng cách đọc patchAdd và find, sau đó tái hiện vấn đề bằng ví dụ Go trong báo cáo. Kiểm tra các test hiện có liên quan đến patch nếu có. Hoàn thành khi một thao tác add với index lớn hơn độ dài của array trả về lỗi và giữ nguyên array, trong khi index bằng độ dài và token - vẫn tiếp tục append.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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 /-.

Ngôn ngữ chính
Go
Star
892
Fork
40
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Chuẩn bị môi trường

Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của tailscale/hujson

Tất cả issue của tailscale/hujson

Issue tương tự

Thêm issue về Go

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.