diff --git a/query/query.go b/query/query.go index 24fbd9d..b50f140 100644 --- a/query/query.go +++ b/query/query.go @@ -157,6 +157,10 @@ func Fingerprint(q string) string { if Debug { fmt.Printf("\n%d:%d %s/%s [%d:%d] %x %q\n", qi, fi, stateName[s], stateName[sqlState], cpFromOffset, cpToOffset, r, r) } + // check `fi` overflow + if fi >= len(f) { + break + } /** * 1. Skip parts of the query for certain states. diff --git a/query/query_test.go b/query/query_test.go index df74fb6..840009c 100644 --- a/query/query_test.go +++ b/query/query_test.go @@ -635,4 +635,11 @@ func TestFingerprintWithNumberInDbName(t *testing.T) { "select 123foo from 123foo", query.Fingerprint(q), ) + // fix fi overflow cause index out of range panic + q = "insert into tb values(1)" + assert.Equal( + t, + "insert into tb values(?+)", + query.Fingerprint(q), + ) }