kovidgoyal/kitty · error
There were %d leftover bytes in the signature data
Error message
There were %d leftover bytes in the signature data
What it means
After consuming all signature blocks, FinishSignatureData found unconsumed bytes left over — the stream length is not consistent with the header's declared block count, indicating truncation, corruption, or extra data.
Source
Thrown at tools/rsync/api.go:124
self.rsync.BlockSize = block_size
self.signature = make([]BlockHash, 0, 1024)
return
}
func (self *Api) read_signature_blocks(data []byte) (consumed int) {
block_hash_size := self.rsync.HashSize() + 12
for ; len(data) >= block_hash_size; data = data[block_hash_size:] {
bl := BlockHash{}
bl.Unserialize(data[:block_hash_size])
self.signature = append(self.signature, bl)
consumed += block_hash_size
}
return
}
func (self *Differ) FinishSignatureData() (err error) {
if len(self.unconsumed_signature_data) > 0 {
return fmt.Errorf("There were %d leftover bytes in the signature data", len(self.unconsumed_signature_data))
}
self.unconsumed_signature_data = nil
if !self.rsync.HasHasher() {
return fmt.Errorf("No header was found in the signature data")
}
return
}
func (self *Patcher) update_delta(data []byte) (consumed int, err error) {
op := Operation{}
for len(data) > 0 {
n, uerr := op.Unserialize(data)
if uerr == nil {
consumed += n
data = data[n:]
if err = self.rsync.ApplyDelta(self.delta_output, self.delta_input, op); err != nil {
return
}View on GitHub (pinned to 6d5d0c4406)
Solutions
- Make sure every chunk of signature data was passed to AddSignatureData before finishing
- Verify the transfer framing so no bytes are lost or duplicated
- Regenerate and resend the full signature
Defensive patterns
Strategy: try-catch
Try / catch
if err := differ.FinishSignatureData(); err != nil { log.Printf("signature incomplete: %v", err); re-fetch signature and retry once } Prevention
- Feed all received chunks to AddSignatureData before finishing
- Use length-prefixed framing so truncation is detectable
When it happens
Trigger: Calling FinishSignatureData when AddSignatureData was fed a byte count not matching whole signature blocks plus header; e.g. stopping mid-block or appending trailing bytes.
Common situations: Partial reads from a network/socket, misframed transfers, or calling FinishSignatureData before all data arrived.
Related errors
- There are %d leftover bytes in the delta
- Invalid weak_hash in signature header: %d
- rsync signature header has zero block size
- rsync signature header has too large block size %d > %d
- The checksum was not received at the end of the delta data
AI-assisted analysis of kovidgoyal/kitty@6d5d0c4406 (2026-08-27).
Data as JSON: /api/errors/84c660320b111257.
Report an issue: GitHub.