{"record":{"id":"f03890fa59e7e606","repo":"hyperledger/fabric","slug":"failed-parsing-header","errorCode":null,"errorMessage":"failed parsing header","messagePattern":"failed parsing header","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/handlers/auth/filter/expiration.go","lineNumber":42,"sourceCode":"\ntype expirationCheckFilter struct {\n\tnext peer.EndorserServer\n}\n\n// Init initializes the Filter with the next EndorserServer\nfunc (f *expirationCheckFilter) Init(next peer.EndorserServer) {\n\tf.next = next\n}\n\nfunc validateProposal(signedProp *peer.SignedProposal) error {\n\tprop, err := protoutil.UnmarshalProposal(signedProp.ProposalBytes)\n\tif err != nil {\n\t\treturn errors.Wrap(err, \"failed parsing proposal\")\n\t}\n\n\thdr, err := protoutil.UnmarshalHeader(prop.Header)\n\tif err != nil {\n\t\treturn errors.Wrap(err, \"failed parsing header\")\n\t}\n\n\tsh, err := protoutil.UnmarshalSignatureHeader(hdr.SignatureHeader)\n\tif err != nil {\n\t\treturn errors.Wrap(err, \"failed parsing signature header\")\n\t}\n\texpirationTime := crypto.ExpiresAt(sh.Creator)\n\tif !expirationTime.IsZero() && time.Now().After(expirationTime) {\n\t\treturn errors.New(\"proposal client identity expired\")\n\t}\n\treturn nil\n}\n\n// ProcessProposal processes a signed proposal\nfunc (f *expirationCheckFilter) ProcessProposal(ctx context.Context, signedProp *peer.SignedProposal) (*peer.ProposalResponse, error) {\n\tif err := validateProposal(signedProp); err != nil {\n\t\treturn nil, err\n\t}","sourceCodeStart":24,"sourceCodeEnd":60,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/core/handlers/auth/filter/expiration.go#L24-L60","documentation":"The expiration-check filter unmarshalled the proposal but failed to parse its Header field — the header bytes are missing or corrupted, preventing extraction of the signature header needed for the identity expiration check.","triggerScenarios":"Thrown at core/handlers/auth/filter/expiration.go:42 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix client-side proposal construction so a valid Header is included","Reject the malformed request"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"2736b63f8fd5932511d56fe68b7039d15977f7f6","analyzedAt":"2026-09-04T08:52:36.465Z","contentChangedAt":"2026-09-04T08:52:36.465Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}