Fix findCounter infinite loop; corpus filter skips chunks past 256 MB
Test and deploy / test (push) Successful in 47s
Test and deploy / edge (push) Successful in 1m45s
Test and deploy / deploy (push) Successful in 2m5s

lastIndexOf('(', -1) searches from 0 again, so a subject starting with a "("
that isn't a counter, without a quote, looped forever. The corpus filter hit
it at 11:23 on Oct 24: the coordinator (and corpus:filter) spun at 100% CPU
for 10 hours and no range finished. The Rust find_counter stops at 0 already.

A chunk inflating past V8's longest string can't be filtered as text; such a
chunk is now stored unfiltered instead of throwing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Daan MeijerandClaude Opus 5.5 committed 2026-10-24 21:08:22 +02:00
1 parent 2dd5b4cd81
commit 03ca96b255
3 files changed
+10 -1

No files matched your search

+2
View File
@@ -47,6 +47,8 @@ interface Counter {
function findCounter(subject: string, after: number): Counter | null {
let open = subject.length
while (true) {
// lastIndexOf('(', -1) searches from 0 again: a "(" at the start that isn't a counter looped forever.
if (open === 0) return null
open = subject.lastIndexOf('(', open - 1)
if (open <= after) return null
let i = open + 1