From 1304ded0fb44d77354ecf5aea549fe0ef1c45890 Mon Sep 17 00:00:00 2001 From: Yanhu007 Date: Mon, 13 Apr 2026 19:08:52 +0800 Subject: [PATCH] fix: bounds check in Delete to prevent index out of range panic Delete accesses data[endOffset+tokEnd] without checking if the index is within bounds. When tokenEnd returns len(data) (no terminator found), this causes an index out of range panic. Found by fuzzing (issue #274). Fixes #274 --- parser.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/parser.go b/parser.go index 1a4e337..20c09e3 100644 --- a/parser.go +++ b/parser.go @@ -752,6 +752,10 @@ func Delete(data []byte, keys ...string) []byte { tokEnd := tokenEnd(data[endOffset:]) tokStart := findTokenStart(data[:keyOffset], ","[0]) + if endOffset+tokEnd >= len(data) { + return data + } + if data[endOffset+tokEnd] == ","[0] { endOffset += tokEnd + 1 } else if data[endOffset+tokEnd] == " "[0] && len(data) > endOffset+tokEnd+1 && data[endOffset+tokEnd+1] == ","[0] {