{"record":{"id":"715e67f85f7f66c6","repo":"hyperledger/fabric","slug":"could-not-convert-message-to-signeddata-s-715e67","errorCode":null,"errorMessage":"could not convert message to signedData: %s","messagePattern":"could not convert message to signedData: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"orderer/common/msgprocessor/sigfilter.go","lineNumber":58,"sourceCode":"// maintenancePolicyName is applied when Orderer/ConsensusType.State = MAINTENANCE\nfunc NewSigFilter(normalPolicyName, maintenancePolicyName string, support SigFilterSupport) *SigFilter {\n\treturn &SigFilter{\n\t\tnormalPolicyName:      normalPolicyName,\n\t\tmaintenancePolicyName: maintenancePolicyName,\n\t\tsupport:               support,\n\t}\n}\n\n// Apply applies the policy given, resulting in Reject or Forward, never Accept\nfunc (sf *SigFilter) Apply(message *cb.Envelope) error {\n\tordererConf, ok := sf.support.OrdererConfig()\n\tif !ok {\n\t\tlogger.Panic(\"Programming error: orderer config not found\")\n\t}\n\n\tsignedData, err := protoutil.EnvelopeAsSignedData(message)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"could not convert message to signedData: %s\", err)\n\t}\n\n\t// In maintenance mode, we typically require the signature of /Channel/Orderer/Writers.\n\t// This will filter out configuration changes that are not related to consensus-type migration\n\t// (e.g on /Channel/Application), and will block Deliver requests from peers (which are normally /Channel/Readers).\n\tpolicyName := sf.normalPolicyName\n\tif ordererConf.ConsensusState() == orderer.ConsensusType_STATE_MAINTENANCE {\n\t\tpolicyName = sf.maintenancePolicyName\n\t}\n\n\tpolicy, ok := sf.support.PolicyManager().GetPolicy(policyName)\n\tif !ok {\n\t\treturn fmt.Errorf(\"could not find policy %s\", policyName)\n\t}\n\n\terr = policy.EvaluateSignedData(signedData)\n\tif err != nil {\n\t\tlogger.Warnw(\"SigFilter evaluation failed\", \"error\", err.Error(), \"ConsensusState\", ordererConf.ConsensusState(), \"policyName\", policyName, \"signingIdentity\", protoutil.LogMessageForSerializedIdentities(signedData))","sourceCodeStart":40,"sourceCodeEnd":76,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/orderer/common/msgprocessor/sigfilter.go#L40-L76","documentation":"SigFilter.Apply wraps a failure of protoutil.EnvelopeAsSignedData: the broadcast message envelope could not be decomposed into signature data (nil/short payload, missing signature or data bytes). Without signed data the Writers/Writers-maintenance policy cannot be evaluated, so the message is rejected.","triggerScenarios":"Thrown at orderer/common/msgprocessor/sigfilter.go:58 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix the client to broadcast a well-formed signed envelope","Verify the envelope was not truncated before reaching the orderer"],"exampleFix":null,"handlingStrategy":"try-catch","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"}