{"record":{"id":"bccd00384ffaf72a","repo":"pion/webrtc","slug":"not-enough-data-for-payload-header","errorCode":null,"errorMessage":"not enough data for payload header","messagePattern":"not enough data for payload header","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/media/oggreader/oggreader.go","lineNumber":30,"sourceCode":"\t\"strings\"\n)\n\nconst (\n\tpageHeaderTypeBeginningOfStream = 0x02\n\tpageHeaderSignature             = \"OggS\"\n\n\tidPageBasePayloadLength = 19\n\tpageHeaderLen           = 27\n)\n\nvar (\n\terrNilStream                       = errors.New(\"stream is nil\")\n\terrBadIDPageSignature              = errors.New(\"bad header signature\")\n\terrBadOpusTagsSignature            = errors.New(\"bad opus tags signature\")\n\terrBadIDPageType                   = errors.New(\"wrong header, expected beginning of stream\")\n\terrBadIDPageLength                 = errors.New(\"payload for id page must be 19 bytes\")\n\terrBadIDPagePayloadSignature       = errors.New(\"bad payload signature\")\n\terrShortPageHeader                 = errors.New(\"not enough data for payload header\")\n\terrChecksumMismatch                = errors.New(\"expected and actual checksum do not match\")\n\terrUnsupportedChannelMappingFamily = errors.New(\"unsupported channel mapping family\")\n)\n\n// OggReader is used to read Ogg files and return page payloads.\ntype OggReader struct {\n\tstream               io.Reader\n\tbytesReadSuccesfully int64\n\tchecksumTable        *[256]uint32\n\tdoChecksum           bool\n}\n\n// OggHeader contains Opus codec metadata parsed from an Opus ID page.\n// This header is extracted from an Ogg page payload that starts with the OpusHead\n// signature (the first page of an Opus stream in an Ogg container).\n//\n// Use OggPageHeader.OpusPacketType() to classify a page payload as OpusHead,\n// and OggPageHeader.ParseOpusHeader() to parse the OpusHead payload.","sourceCodeStart":12,"sourceCodeEnd":48,"githubUrl":"https://github.com/pion/webrtc/blob/8c25dc09fa9e7c09aac4309ead88093d760432b0/pkg/media/oggreader/oggreader.go#L12-L48","documentation":"errShortPageHeader is returned by ParseNextPage when the underlying stream yields fewer bytes than the fixed 27-byte Ogg page header before the segment table. This means the stream ended mid-header or delivered a truncated page.","triggerScenarios":"ParseNextPage (oggreader.go:281) reads len(header) bytes from the stream and gets n < len(header): end-of-file mid-page or a truncated read.","commonSituations":"Network stream cut off mid-page, partially downloaded/truncated file, passing a closed or exhausted reader back to ParseNextPage expecting more data.","solutions":["Treat it as end-of-stream/truncation and stop parsing","Re-download or re-capture the file; check producer finished writing","Inspect the reader source (socket/file) for premature closure"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"page, payload, err := reader.ParseNextPage()\nif errors.Is(err, oggreader.ErrShortPageHeader) {\n    // treat as truncated/end-of-stream: stop and finalize\n    return nil\n}\nif err != nil { return err }","preventionTips":["Detect EOF vs truncation in your stream plumbing before feeding the reader","Check file size/completeness after downloads","Keep readers and producers on the same connection lifetime"],"tags":["ogg","truncation","io","stream"],"backgroundTag":"stream-truncated","analyzedSha":"8c25dc09fa9e7c09aac4309ead88093d760432b0","analyzedAt":"2026-09-03T21:56:56.182Z","contentChangedAt":"2026-09-03T21:56:56.182Z","schemaVersion":2},"datasetVersion":"2026-09-11T07:07:21.782Z"}