{"record":{"id":"7a217b9d353ee9c7","repo":"nats-io/nats-server","slug":"indexcachebuf-corrupt-record-state-in-s-dlen-d","errorCode":null,"errorMessage":"indexCacheBuf corrupt record state in %s: dlen %d slen %d index %d rl %d lbuf %d","messagePattern":"indexCacheBuf corrupt record state in (.+?): dlen (.+?) slen (.+?) index (.+?) rl (.+?) lbuf (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/filestore.go","lineNumber":8526,"sourceCode":"\tfor index < lbuf {\n\t\tif index+msgHdrSize > lbuf {\n\t\t\treturn errCorruptState\n\t\t}\n\t\thdr := buf[index : index+msgHdrSize]\n\t\trl, slen := le.Uint32(hdr[0:]), int(le.Uint16(hdr[20:]))\n\t\tseq = le.Uint64(hdr[4:])\n\n\t\thasHeaders := rl&hbit != 0\n\t\t// Clear any headers bit that could be set.\n\t\trl &^= hbit\n\t\tshlen := slen\n\t\tif hasHeaders {\n\t\t\tshlen += 4\n\t\t}\n\t\tdlen := int(rl) - msgHdrSize\n\t\t// Do some quick sanity checks here.\n\t\tif dlen < 0 || shlen > (dlen-recordHashSize) || dlen > int(rl) || index+rl > lbuf || rl > rlBadThresh {\n\t\t\tmb.fs.warn(\"indexCacheBuf corrupt record state in %s: dlen %d slen %d index %d rl %d lbuf %d\", mb.mfn, dlen, slen, index, rl, lbuf)\n\t\t\t// This means something is off.\n\t\t\t// TODO(dlc) - Add into bad list?\n\t\t\treturn errCorruptState\n\t\t}\n\n\t\t// Check for tombstones which we can skip in terms of indexing.\n\t\tif seq&tbit != 0 {\n\t\t\tindex += rl\n\t\t\tcontinue\n\t\t}\n\n\t\t// Clear any erase bits.\n\t\terased := seq&ebit != 0\n\t\tseq = seq &^ ebit\n\n\t\t// The sequence needs to only ever move up.\n\t\tif seq <= last {\n\t\t\t// Advance to next record.","sourceCodeStart":8508,"sourceCodeEnd":8544,"githubUrl":"https://github.com/nats-io/nats-server/blob/3a66a489d262bf89b71a71c955c94920394532f3/server/filestore.go#L8508-L8544","documentation":"Per-record sanity checks on a message header inside indexCacheBuf failed: negative data length, subject length exceeding record bounds, record length beyond buffer/rlBadThresh, or the record overrunning the buffer. The block is corrupt and indexing stops with errCorruptState.","triggerScenarios":"Thrown at server/filestore.go:8526 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Allow the store to mark the block corrupt and rebuild from remaining data","Investigate torn writes or media corruption on the storage device","Restore from backup if the affected messages are required"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"3a66a489d262bf89b71a71c955c94920394532f3","analyzedAt":"2026-09-02T04:41:54.247Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}