{"record":{"id":"f1f19a9f94434548","repo":"hyperledger/fabric","slug":"failed-parsing-signature-header","errorCode":null,"errorMessage":"failed parsing signature header","messagePattern":"failed parsing signature header","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/handlers/auth/filter/expiration.go","lineNumber":47,"sourceCode":"// 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}\n\treturn f.next.ProcessProposal(ctx, signedProp)\n}\n","sourceCodeStart":29,"sourceCodeEnd":63,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/core/handlers/auth/filter/expiration.go#L29-L63","documentation":"Returned by the expiration filter's validateProposal when protoutil.UnmarshalSignatureHeader fails to decode the proposal header's SignatureHeader. The proposal bytes parsed, but the signer block inside the header is not valid protobuf, so expiration checks cannot proceed.","triggerScenarios":"Thrown at core/handlers/auth/filter/expiration.go:47 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Ensure the client populates a valid SignatureHeader with a serialized identity","Reject the malformed proposal"],"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"}