{"record":{"id":"1a51197db05425cb","repo":"dotnet/wpf","slug":"sr-format-sr-badfixedtextposition-position","errorCode":null,"errorMessage":"SR.Format(SR.BadFixedTextPosition, \"position\")","messagePattern":"SR\\.Format\\(SR\\.BadFixedTextPosition, \"position\"\\)","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Documents/DocumentSequenceTextContainer.cs","lineNumber":352,"sourceCode":"\n        //--------------------------------------------------------------------\n        // Utility Method\n        //---------------------------------------------------------------------\n\n        // Verify parameter. Throw Exception if necessary.\n        internal DocumentSequenceTextPointer VerifyPosition(ITextPointer position)\n        {\n            ArgumentNullException.ThrowIfNull(position);\n\n            if (position.TextContainer != this)\n            {\n                throw new ArgumentException(SR.Format(SR.NotInAssociatedContainer, \"position\"));\n            }\n\n            DocumentSequenceTextPointer tp = position as DocumentSequenceTextPointer;\n            if (tp == null)\n            {\n                throw new ArgumentException(SR.Format(SR.BadFixedTextPosition, \"position\"));\n            }\n\n            return tp;\n        }\n\n\n        // Given an ITextPointer in a child TextContainer, create a position in parent's\n        // address space to represent it.\n        internal DocumentSequenceTextPointer MapChildPositionToParent(ITextPointer tp)\n        {\n            ChildDocumentBlock cdb = this._doclistHead;\n            while (cdb != null)\n            {\n                if (cdb.ChildContainer == tp.TextContainer)\n                {\n                    return new DocumentSequenceTextPointer(cdb, tp);\n                }\n                cdb = cdb.NextBlock;","sourceCodeStart":334,"sourceCodeEnd":370,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Documents/DocumentSequenceTextContainer.cs#L334-L370","documentation":"In DocumentSequenceTextContainer.VerifyPosition, after confirming the pointer belongs to this container, the code downcasts to DocumentSequenceTextPointer. If the pointer is valid for this container but is not a DocumentSequenceTextPointer instance (e.g., a generic TextPointer), ArgumentException with BadFixedTextPosition is thrown.","triggerScenarios":"Passing a non-DocumentSequenceTextPointer ITextPointer implementation into position-comparison APIs on a DocumentSequenceTextContainer; interop code supplying a plain TextPointer or a mock pointer.","commonSituations":"Custom ITextPointer implementations used in text tests or frameworks interacting with a FixedDocumentSequence; mixed pointer types after refactoring code that used FlowDocument pointers.","solutions":["Only pass pointers created by the DocumentSequenceTextContainer itself (DocumentSequenceTextPointer instances)","Create positions via ((ITextContainer)seqContainer).Start.CreatePointer(direction)","Catch ArgumentException and recreate the pointer from the sequence container"],"exampleFix":"// before\nvar tp = seqContainer.VerifyPosition(genericPointer);\n// after\nvar tp = seqContainer.VerifyPosition(((ITextContainer)seqContainer).Start.CreatePointer(LogicalDirection.Forward));","handlingStrategy":"type-guard","validationCode":"if (position is not DocumentSequenceTextPointer)\n    throw new ArgumentException(\"position must be a DocumentSequenceTextPointer\");","typeGuard":"bool IsSequencePointer(ITextPointer p) => p is DocumentSequenceTextPointer;","tryCatchPattern":"try { tp = seqContainer.VerifyPosition(pointer); }\ncatch (ArgumentException) { tp = ((ITextContainer)seqTextContainer).Start.CreatePointer(); }","preventionTips":["Only pass pointers created by DocumentSequenceTextContainer into its APIs","Avoid custom ITextPointer implementations with sequences","Keep pointer creation and consumption within the same document object"],"tags":["wpf","documents","argument","pointer","type-mismatch"],"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"}