diff --git a/src/Ramstack.FileProviders.Globbing/Internal/PathHelper.cs b/src/Ramstack.FileProviders.Globbing/Internal/PathHelper.cs index 0a9c116..80b1650 100644 --- a/src/Ramstack.FileProviders.Globbing/Internal/PathHelper.cs +++ b/src/Ramstack.FileProviders.Globbing/Internal/PathHelper.cs @@ -110,7 +110,10 @@ private static ReadOnlySpan GetPartialPattern(string pattern, int depth) if (depth < 1 || r.final == length || IsGlobStar(ref s, r.start, r.final)) + { + Debug.Assert(r.final >= 0 && r.final <= pattern.Length); return MemoryMarshal.CreateReadOnlySpan(ref s, r.final); + } } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -245,7 +248,7 @@ public PathSegmentIterator() => return (start, _last); } - if (Avx2.IsSupported && (int)_position + Vector256.Count <= length) + if (Avx2.IsSupported && (int)_position <= length - Vector256.Count) { var chunk = LoadVector256(ref source, _position); var slash = Vector256.Create('/'); @@ -265,7 +268,7 @@ public PathSegmentIterator() => if (_mask == 0) _position += Vector256.Count; } - else if (Sse2.IsSupported && !Avx2.IsSupported && (int)_position + Vector128.Count <= length) + else if (Sse2.IsSupported && !Avx2.IsSupported && (int)_position <= length - Vector128.Count) { var chunk = LoadVector128(ref source, _position); var slash = Vector128.Create('/'); @@ -285,7 +288,7 @@ public PathSegmentIterator() => if (_mask == 0) _position += Vector128.Count; } - else if (AdvSimd.Arm64.IsSupported && (int)_position + Vector128.Count <= length) + else if (AdvSimd.Arm64.IsSupported && (int)_position <= length - Vector128.Count) { var chunk = LoadVector128(ref source, _position); var slash = Vector128.Create('/');