{"record":{"id":"6112b17063626c06","repo":"dotnet/wpf","slug":"data-space-transform-stack-includes-undefined-transform","errorCode":null,"errorMessage":"Data space transform stack includes undefined transform labels.","messagePattern":"Data space transform stack includes undefined transform labels\\.","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/WindowsBase/System/IO/Packaging/CompoundFile/DataSpaceManager.cs","lineNumber":598,"sourceCode":"\n        // Given label must be a non-empty string\n        CU.CheckStringAgainstNullAndEmpty(newDataSpaceLabel, \"newDataSpaceLabel\");\n\n        // Given label must not be a reserved string\n        CU.CheckStringAgainstReservedName(newDataSpaceLabel, \"newDataSpaceLabel\");\n\n        // Given label must not already be in use\n        if( DataSpaceIsDefined( newDataSpaceLabel ) )\n            throw new ArgumentException(\n                SR.DataSpaceLabelInUse);\n\n        // Given transform array must include labels that have already been defined\n        foreach( string transformLabel in transformStack )\n        {\n            CU.CheckStringAgainstNullAndEmpty( transformLabel, \"Transform label\" );\n\n            if( !TransformLabelIsDefined( transformLabel ) )\n                throw new ArgumentException(\n                    SR.TransformLabelUndefined);\n        }\n\n        // Passes all inspection, data space definition successful.\n        SetDataSpaceDefinition( newDataSpaceLabel, new DataSpaceDefinition(new ArrayList(transformStack), null));\n        _dirtyFlag = true;\n\n        return;\n    }\n\n    /// <summary>\n    /// Internal shortcut to check if data space is defined.  When we start\n    /// doing on-demand reads of data space definitions, the \"demand\" could\n    /// be triggered by this.\n    /// </summary>\n    /// <param name=\"dataSpaceLabel\">Label to check</param>\n    /// <returns>True if label is in use</returns>\n    internal bool DataSpaceIsDefined( string dataSpaceLabel )","sourceCodeStart":580,"sourceCodeEnd":616,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/WindowsBase/System/IO/Packaging/CompoundFile/DataSpaceManager.cs#L580-L616","documentation":"DataSpaceManager.DefineDataSpace validates that every transform label in the given transform stack has already been registered via DefineTransform. If any label in the stack is not a defined transform label, an ArgumentException with SR.TransformLabelUndefined is thrown and the data space is not created. This is a fail-fast guard so a data space never references a transform that has no registered TransformEnvironment/instance.","triggerScenarios":"Calling DefineDataSpace(string[] transformStack, string newDataSpaceLabel) (or the auto-named overload, which delegates to it) with an entry in transformStack that was never passed to DefineTransform, is misspelled, differs in casing beyond the comparison rules, is null, or is an empty string. Also thrown via SR.TransformLabelUndefined when a label was defined but its transform object was subsequently found unresolvable.","commonSituations":"Typo or casing mismatch between the label used in DefineTransform and in DefineDataSpace; defining the data space before registering its transforms; copying sample code that references transform labels from a different package; building the stack array dynamically and inserting a null/empty element.","solutions":["Register every transform first: call DefineTransform for each label before passing the stack to DefineDataSpace.","Verify each label string matches exactly the label used in DefineTransform (watch for typos, trailing whitespace, null/empty entries).","Reorder your code so transform registration happens before data space definition.","Catch ArgumentException with message SR.TransformLabelUndefined and log which stack element is undefined before retrying with corrected labels."],"exampleFix":"// before\nmanager.DefineDataSpace(new[] { \"EncodedTransform\" }, \"MyDataSpace\");\n// after\nif (!manager.TransformLabelIsDefined(\"EncodedTransform\"))\n    manager.DefineTransform(\"EncodedTransform\", transformFactory);\nmanager.DefineDataSpace(new[] { \"EncodedTransform\" }, \"MyDataSpace\");","handlingStrategy":"validation","validationCode":"string[] stack = GetTransformStack();\nif (stack == null || stack.Any(l => string.IsNullOrEmpty(l) || !manager.TransformLabelIsDefined(l)))\n    throw new InvalidOperationException(\"All transform labels must be defined via DefineTransform before DefineDataSpace.\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always register transforms with DefineTransform before defining data spaces.","Centralize transform label constants instead of scattering string literals.","Add an assertion helper that validates the whole stack before calling DefineDataSpace."],"tags":["argument","packaging","compound-file","undefined-label"],"backgroundTag":"invalid-argument-value","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-21T21:30:21.729Z"}