golang/go · error
read descsize failed: %v
Error message
read descsize failed: %v
What it means
Returned after successfully reading namesize when binary.Read of the descsize field fails (non-EOF). The ELF note header is namesize(4) + descsize(4) + type(4); failing on the second word means the section ended prematurely between fields. Wrapped and propagated from the note reader.
Source
Thrown at src/cmd/internal/buildid/note.go:51
}
defer f.Close()
for _, sect := range f.Sections {
if sect.Type != elf.SHT_NOTE {
continue
}
r := sect.Open()
for {
var namesize, descsize, noteType int32
err = binary.Read(r, f.ByteOrder, &namesize)
if err != nil {
if err == io.EOF {
break
}
return nil, fmt.Errorf("read namesize failed: %v", err)
}
err = binary.Read(r, f.ByteOrder, &descsize)
if err != nil {
return nil, fmt.Errorf("read descsize failed: %v", err)
}
err = binary.Read(r, f.ByteOrder, ¬eType)
if err != nil {
return nil, fmt.Errorf("read type failed: %v", err)
}
noteName, err := readAligned4(r, namesize)
if err != nil {
return nil, fmt.Errorf("read name failed: %v", err)
}
desc, err := readAligned4(r, descsize)
if err != nil {
return nil, fmt.Errorf("read desc failed: %v", err)
}
if name == string(noteName) && typ == noteType {
return desc, nil
}
}
}View on GitHub (pinned to b6b368adc5)
Solutions
- Rebuild the binary from source.
- Clean the build cache: `go clean -cache`.
- Check the binary was completely written (size, checksums, `file <bin>`).
- Avoid stripping or post-processing the binary with tools that truncate note sections.
Defensive patterns
Strategy: try-catch
Try / catch
if _, err := buildid.ReadFile(bin); err != nil {
if strings.Contains(err.Error(), "read descsize failed") {
return rebuild(bin) // truncated ELF note header
}
return err
} Prevention
- Ensure link steps complete without interruption.
- Checksum large binaries after transfer.
- Run `go clean -cache` when corrupt objects are suspected.
When it happens
Trigger: Reading an ELF note section whose header is at least 4 bytes but fewer than 8, so namesize parses but descsize does not. Produced by the same code path as error 1227 when corruption lands mid-header.
Common situations: Truncated ELF note sections in partially linked or partially downloaded Go binaries; corrupt object cache entries; hand-modified binaries.
Related errors
- read namesize failed: %v
- read type failed: %v
- read name failed: %v
- read desc failed: %v
- cannot find __text section
AI-assisted analysis of golang/go@b6b368adc5 (2026-08-12).
Data as JSON: /api/errors/1e302bce0dd8f528.
Report an issue: GitHub.