nats-io/nats-server · error

indexCacheBuf corrupt record state in %s: dlen %d slen %d in

Error message

indexCacheBuf corrupt record state in %s: dlen %d slen %d index %d rl %d lbuf %d

What it means

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.

Source

Thrown at server/filestore.go:8526

	for index < lbuf {
		if index+msgHdrSize > lbuf {
			return errCorruptState
		}
		hdr := buf[index : index+msgHdrSize]
		rl, slen := le.Uint32(hdr[0:]), int(le.Uint16(hdr[20:]))
		seq = le.Uint64(hdr[4:])

		hasHeaders := rl&hbit != 0
		// Clear any headers bit that could be set.
		rl &^= hbit
		shlen := slen
		if hasHeaders {
			shlen += 4
		}
		dlen := int(rl) - msgHdrSize
		// Do some quick sanity checks here.
		if dlen < 0 || shlen > (dlen-recordHashSize) || dlen > int(rl) || index+rl > lbuf || rl > rlBadThresh {
			mb.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)
			// This means something is off.
			// TODO(dlc) - Add into bad list?
			return errCorruptState
		}

		// Check for tombstones which we can skip in terms of indexing.
		if seq&tbit != 0 {
			index += rl
			continue
		}

		// Clear any erase bits.
		erased := seq&ebit != 0
		seq = seq &^ ebit

		// The sequence needs to only ever move up.
		if seq <= last {
			// Advance to next record.

View on GitHub (pinned to 3a66a489d2)

Solutions

  1. Allow the store to mark the block corrupt and rebuild from remaining data
  2. Investigate torn writes or media corruption on the storage device
  3. Restore from backup if the affected messages are required
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at server/filestore.go:8526 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of nats-io/nats-server@3a66a489d2 (2026-09-02). Data as JSON: /api/errors/7a217b9d353ee9c7. Report an issue: GitHub.