{"record":{"id":"012699819ceff2de","repo":"dotnet/wpf","slug":"sr-parserwriterunknownorigin","errorCode":null,"errorMessage":"SR.ParserWriterUnknownOrigin","messagePattern":"SR\\.ParserWriterUnknownOrigin","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/XamlStream.cs","lineNumber":155,"sourceCode":"        /// Seek past the writeLength.\n        /// </summary>\n        /// <param name=\"offset\">seek offset</param>\n        /// <param name=\"loc\">specifies how to interpret the seeek offset</param>\n        /// <returns></returns>\n        internal long WriterSeek(long offset, SeekOrigin loc)\n        {\n            switch(loc)\n            {\n                case SeekOrigin.Begin:\n                    WritePosition = (int) offset;\n                    break;\n                case SeekOrigin.Current:\n                    WritePosition = (int) (WritePosition + offset);\n                    break;\n                case SeekOrigin.End:\n                    throw new NotSupportedException(SR.ParserWriterNoSeekEnd);\n                default:\n                    throw new ArgumentException(SR.ParserWriterUnknownOrigin);\n            }\n\n            if( (!( WritePosition <= WriteLength ))\n                ||\n                (!( WritePosition >= ReadLength  )) )\n            {\n                throw new ArgumentOutOfRangeException( nameof(offset));\n            }\n\n            return WritePosition;\n        }\n\n\n        /// <summary>\n        /// Called by the Writer to indicate its okay for the reader to see\n        /// the file up to and including the position. Once the Writer calls\n        /// this it cannot go back and change the content.\n        /// </summary>","sourceCodeStart":137,"sourceCodeEnd":173,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/XamlStream.cs#L137-L173","documentation":"XamlStream's WriterSeek validates the SeekOrigin value; any value other than Begin, Current, or End reaches the default branch and throws ArgumentException(SR.ParserWriterUnknownOrigin). This indicates an invalid SeekOrigin argument.","triggerScenarios":"Calling Seek(offset, (SeekOrigin)someInt) on the XamlStream write side with an int that is not a defined SeekOrigin member (e.g. 3 or a negative/cast value).","commonSituations":"Origin value loaded from config/data or computed by cast instead of using SeekOrigin enum members; corrupted interop code passing a bad enum value.","solutions":["Pass a defined SeekOrigin value: SeekOrigin.Begin, SeekOrigin.Current, or SeekOrigin.End.","Validate any externally supplied origin integer against Enum.IsDefined(typeof(SeekOrigin), value) before casting.","Fix the caller that computes the origin value."],"exampleFix":"// before\nstream.Seek(offset, (SeekOrigin)originInt); // originInt = 9\n// after\nif (!Enum.IsDefined(typeof(SeekOrigin), originInt)) throw new ArgumentException(\"bad origin\");\nstream.Seek(offset, (SeekOrigin)originInt);","handlingStrategy":"validation","validationCode":"if (!Enum.IsDefined(typeof(SeekOrigin), origin)) throw new ArgumentException(nameof(origin));","typeGuard":"bool validOrigin = origin is SeekOrigin.Begin or SeekOrigin.Current or SeekOrigin.End;","tryCatchPattern":"try { stream.Seek(offset, origin); }\ncatch (ArgumentException ex) when (ex.Message.Contains(\"origin\")) { /* fix origin value */ }","preventionTips":["Always pass SeekOrigin enum members, never raw ints.","Validate externally sourced origin values with Enum.IsDefined.","Enable checked enum conversions in interop boundaries."],"tags":["wpf","xaml","io","stream","enum"],"backgroundTag":"invalid-enum-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"}