From 44ba4aab7e101b70df42dfe8b1500d997dd8efac Mon Sep 17 00:00:00 2001 From: Salvador Cipolla Date: Fri, 10 Apr 2026 21:56:55 -0300 Subject: [PATCH] [VP Lib]Make sure we are reading the same number of bytes as we are writting (H3 fix) --- VP.NET/VPContainer.cs | 18 ++++++++++++++---- VP.NET/VPFile.cs | 18 ++++++++++++++---- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/VP.NET/VPContainer.cs b/VP.NET/VPContainer.cs index 71cdfc19..79e60494 100644 --- a/VP.NET/VPContainer.cs +++ b/VP.NET/VPContainer.cs @@ -310,8 +310,13 @@ private async Task SaveRecursive(VPFile file, Stream vp, int bufferSize, List bufferSize ? bufferSize : leftToCopy; - leftToCopy -= await sourceVP.ReadAsync(buffer, 0, bytesToRead); - await vp.WriteAsync(buffer, 0, bytesToRead); + var bytesRead = await sourceVP.ReadAsync(buffer, 0, bytesToRead); + if(bytesRead != bytesToRead) + { + throw new IOException("Unable to read from file"); + } + leftToCopy -= bytesRead; + await vp.WriteAsync(buffer, 0, bytesRead); } } else @@ -343,8 +348,13 @@ private async Task SaveRecursive(VPFile file, Stream vp, int bufferSize, List bufferSize ? bufferSize : leftToCopy; - leftToCopy -= await sourceVP.ReadAsync(buffer, 0, bytesToRead); - await vp.WriteAsync(buffer, 0, bytesToRead); + var bytesRead = await sourceVP.ReadAsync(buffer, 0, bytesToRead); + if (bytesRead != bytesToRead) + { + throw new IOException("Unable to read from file"); + } + leftToCopy -= bytesRead; + await vp.WriteAsync(buffer, 0, bytesRead); } } sourceVP.Dispose(); diff --git a/VP.NET/VPFile.cs b/VP.NET/VPFile.cs index 053dadb6..bd47ac54 100644 --- a/VP.NET/VPFile.cs +++ b/VP.NET/VPFile.cs @@ -280,8 +280,13 @@ public async Task ReadToStream(Stream destination) { byte[] buffer = new byte[bufferSize]; int bytesToRead = leftToCopy > bufferSize ? bufferSize : leftToCopy; - leftToCopy -= await source.ReadAsync(buffer, 0, bytesToRead); - await destination.WriteAsync(buffer, 0, bytesToRead); + var bytesRead = await source.ReadAsync(buffer, 0, bytesToRead); + if (bytesRead != bytesToRead) + { + throw new IOException("Unable to read from file"); + } + leftToCopy -= bytesRead; + await destination.WriteAsync(buffer, 0, bytesRead); } } @@ -333,8 +338,13 @@ private async Task ExtractFile(string fullpath) { byte[] buffer = new byte[bufferSize]; int bytesToRead = leftToCopy > bufferSize ? bufferSize : leftToCopy; - leftToCopy -= await source.ReadAsync(buffer, 0, bytesToRead); - await destination.WriteAsync(buffer, 0, bytesToRead); + var bytesRead = await source.ReadAsync(buffer, 0, bytesToRead); + if (bytesRead != bytesToRead) + { + throw new IOException("Unable to read from file"); + } + leftToCopy -= bytesRead; + await destination.WriteAsync(buffer, 0, bytesRead); } }