@@ -176,54 +176,44 @@ internal static async Task ExtractTarGzipAsync(
176176 var decompressedStream = new GZipStream ( gzipStream , CompressionMode . Decompress ) ;
177177 await using var _2 = decompressedStream . ConfigureAwait ( false ) ;
178178
179- Stream sourceStream = decompressedStream ;
180- IncrementalHash ? hash = null ;
181- MemoryStream ? bufferedStream = null ;
182-
183- try
179+ if ( string . IsNullOrEmpty ( checksum ) )
184180 {
185- // If we have a checksum, we need to verify the content
186- if ( ! string . IsNullOrEmpty ( checksum ) )
187- {
188- hash = IncrementalHash . CreateHash ( HashAlgorithmName . SHA256 ) ;
189-
190- // Read the entire decompressed content for hashing
191- bufferedStream = new MemoryStream ( ) ;
192- var buffer = new byte [ _bufferSize ] ;
193- int bytesRead ;
194- while ( ( bytesRead = await decompressedStream . ReadAsync ( buffer . AsMemory ( 0 , buffer . Length ) , cancellationToken ) . ConfigureAwait ( false ) ) > 0 )
195- {
196- hash . AppendData ( buffer . AsSpan ( 0 , bytesRead ) ) ;
197- await bufferedStream . WriteAsync ( buffer . AsMemory ( 0 , bytesRead ) , cancellationToken ) . ConfigureAwait ( false ) ;
198- }
199-
200- // Verify the checksum
201- var computedHash = hash . GetHashAndReset ( ) ;
202- var computedDigest = $ "sha256:{ Convert . ToHexString ( computedHash ) . ToLowerInvariant ( ) } ";
203- if ( ! string . Equals ( computedDigest , checksum , StringComparison . OrdinalIgnoreCase ) )
204- {
205- throw new InvalidOperationException ( $ "Content digest mismatch: expected { checksum } , got { computedDigest } ") ;
206- }
207-
208- bufferedStream . Position = 0 ;
209- sourceStream = bufferedStream ;
210- }
211-
212181 await ExtractTarDirectoryAsync (
213182 targetDirectory ,
214183 directoryName ,
215- sourceStream ,
184+ decompressedStream ,
216185 preservePermissions ,
217186 cancellationToken ) . ConfigureAwait ( false ) ;
187+ return ;
218188 }
219- finally
189+
190+ using var hash = IncrementalHash . CreateHash ( HashAlgorithmName . SHA256 ) ;
191+ await using var bufferedStream = new MemoryStream ( ) ;
192+
193+ var buffer = new byte [ _bufferSize ] ;
194+ int bytesRead ;
195+ while ( ( bytesRead = await decompressedStream . ReadAsync ( buffer . AsMemory ( 0 , buffer . Length ) , cancellationToken ) . ConfigureAwait ( false ) ) > 0 )
220196 {
221- hash ? . Dispose ( ) ;
222- if ( bufferedStream != null )
223- {
224- await bufferedStream . DisposeAsync ( ) . ConfigureAwait ( false ) ;
225- }
197+ hash . AppendData ( buffer . AsSpan ( 0 , bytesRead ) ) ;
198+ await bufferedStream . WriteAsync ( buffer . AsMemory ( 0 , bytesRead ) , cancellationToken ) . ConfigureAwait ( false ) ;
226199 }
200+
201+ // Verify the checksum
202+ var computedHash = hash . GetHashAndReset ( ) ;
203+ var computedDigest = $ "sha256:{ Convert . ToHexString ( computedHash ) . ToLowerInvariant ( ) } ";
204+ if ( ! string . Equals ( computedDigest , checksum , StringComparison . OrdinalIgnoreCase ) )
205+ {
206+ throw new InvalidOperationException ( $ "Content digest mismatch: expected { checksum } , got { computedDigest } ") ;
207+ }
208+
209+ bufferedStream . Position = 0 ;
210+
211+ await ExtractTarDirectoryAsync (
212+ targetDirectory ,
213+ directoryName ,
214+ bufferedStream ,
215+ preservePermissions ,
216+ cancellationToken ) . ConfigureAwait ( false ) ;
227217 }
228218
229219 /// <summary>
0 commit comments