From 568bfde2fba9119087fc9bfd996cc42c94291e26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81d=C3=A1m=20Kov=C3=A1cs?= Date: Fri, 12 May 2023 16:54:08 +0200 Subject: [PATCH] Fix LocalContentProvider GetContetnAsync --- .../LocalContentProvider.cs | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/Providers/FileTime.Providers.Local/LocalContentProvider.cs b/src/Providers/FileTime.Providers.Local/LocalContentProvider.cs index af7f966..524b243 100644 --- a/src/Providers/FileTime.Providers.Local/LocalContentProvider.cs +++ b/src/Providers/FileTime.Providers.Local/LocalContentProvider.cs @@ -388,15 +388,25 @@ public sealed partial class LocalContentProvider : ContentProviderBase, ILocalCo bufferSize: 1, // bufferSize == 1 used to avoid unnecessary buffer in FileStream FileOptions.Asynchronous | FileOptions.SequentialScan); - var realFileSize = new FileInfo(element.NativePath!.Path).Length; + var size = new FileInfo(element.NativePath!.Path).Length; - var size = maxLength ?? realFileSize switch + if (maxLength.HasValue && maxLength.Value < size) + { + size = maxLength.Value; + } + + var finalSize = size switch { > int.MaxValue => int.MaxValue, - _ => (int) realFileSize + _ => (int) size }; - var buffer = new byte[size]; - await reader.ReadAsync(buffer.AsMemory(0, size), cancellationToken); + var buffer = new byte[finalSize]; + var realSize = await reader.ReadAsync(buffer.AsMemory(0, finalSize), cancellationToken); + + if (realSize == buffer.Length) return buffer; + + var finalData = new byte[realSize]; + Array.Copy(buffer, finalData, realSize); return buffer; }