dotnet/wpf · error · ArgumentOutOfRangeException
SR.SeekOriginInvalid
Error message
SR.SeekOriginInvalid
What it means
CompressEmulationStream.Seek validates the SeekOrigin. Only Begin, Current, and End are accepted; any other value (invalid cast, uninitialized enum) reaches the default branch and throws ArgumentOutOfRangeException with SR.SeekOriginInvalid.
Solutions
- Pass only SeekOrigin.Begin, SeekOrigin.Current, or SeekOrigin.End.
- Validate/normalize the origin enum before calling Seek on wrapped streams.
- Fix code that computes origin from an int without range checking.
Example fix
// before
emulationStream.Seek(offset, (SeekOrigin)rawValue);
// after
if (rawValue < 0 || rawValue > (int)SeekOrigin.End)
throw new ArgumentOutOfRangeException(nameof(rawValue));
emulationStream.Seek(offset, (SeekOrigin)rawValue); Defensive patterns
Strategy: validation
Validate before calling
bool IsValidSeekOrigin(SeekOrigin origin) =>
origin is SeekOrigin.Begin or SeekOrigin.Current or SeekOrigin.End; Type guard
bool IsDefinedSeekOrigin(SeekOrigin o) => o >= SeekOrigin.Begin && o <= SeekOrigin.End;
Try / catch
try { es.Seek(offset, origin); }
catch (ArgumentOutOfRangeException) { reportInvalidOrigin(origin); } Prevention
- Only pass literal SeekOrigin.Begin/Current/End values
- Range-check any origin value derived from ints or config
- Wrap generic stream-forwarding helpers with origin validation
When it happens
Trigger: Calling Seek(offset, origin) with an out-of-range SeekOrigin value, e.g. (SeekOrigin)42 from an unvalidated caller or computed enum value, via Position or directly.
Common situations: Generic stream-wrapper code that passes user- or config-supplied origin values through without validation; deserialized enum values from older data.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- SR.SeekNegative
- args
- ArgumentOutOfRangeException(authenticationType)
- ArgumentOutOfRangeException(nameof(offset))
- ArgumentOutOfRangeException (Parameter 'origin')
AI-assisted analysis of dotnet/wpf@81131a70a4 (2026-09-14).
Data as JSON: /api/errors/a06572efd23757e6.
Report an issue: GitHub.
Appendix: source
Thrown at src/Microsoft.DotNet.Wpf/src/WindowsBase/MS/Internal/IO/Packaging/CompressEmulationStream.cs:87
{
case SeekOrigin.Begin:
{
temp = offset;
break;
}
case SeekOrigin.Current:
{
checked { temp = _tempStream.Position + offset; }
break;
}
case SeekOrigin.End:
{
checked { temp = _tempStream.Length + offset; }
break;
}
default:
{
throw new ArgumentOutOfRangeException(nameof(origin), SR.SeekOriginInvalid);
}
}
if (temp < 0)
{
throw new ArgumentException(SR.SeekNegative);
}
return _tempStream.Seek(offset, origin);
}
/// <summary>
/// SetLength
/// </summary>
public override void SetLength(long newLength)
{
CheckDisposed();
View on GitHub (pinned to 81131a70a4)