diff --git a/src/installer/managed/Microsoft.NET.HostModel/ResourceUpdater.cs b/src/installer/managed/Microsoft.NET.HostModel/ResourceUpdater.cs index 1873e38956038e..6135fd9951465f 100644 --- a/src/installer/managed/Microsoft.NET.HostModel/ResourceUpdater.cs +++ b/src/installer/managed/Microsoft.NET.HostModel/ResourceUpdater.cs @@ -15,10 +15,10 @@ namespace Microsoft.NET.HostModel /// public sealed class ResourceUpdater : IDisposable { - private readonly FileStream stream; + private readonly FileStream _stream; private readonly PEReader _reader; private ResourceData _resourceData; - private readonly bool leaveOpen; + private readonly bool _leaveOpen; /// /// Create a resource updater for the given PE file. @@ -39,18 +39,24 @@ public ResourceUpdater(string peFile) /// public ResourceUpdater(FileStream stream, bool leaveOpen = false) { - this.stream = stream; - this.leaveOpen = leaveOpen; +#if NET + ArgumentNullException.ThrowIfNull(stream); +#endif + + _stream = stream; + _leaveOpen = leaveOpen; try { - this.stream.Seek(0, SeekOrigin.Begin); - _reader = new PEReader(this.stream, PEStreamOptions.LeaveOpen); + _stream.Seek(0, SeekOrigin.Begin); + _reader = new PEReader(_stream, PEStreamOptions.LeaveOpen); _resourceData = new ResourceData(_reader); } catch (Exception) { if (!leaveOpen) - this.stream?.Dispose(); + { + _stream.Dispose(); + } throw; } } @@ -185,12 +191,12 @@ public void Update() int trailingSectionVirtualStart = rsrcVirtualAddress + rsrcOriginalVirtualSize; int trailingSectionStart = rsrcPointerToRawData + rsrcOriginalRawDataSize; - int trailingSectionLength = (int)(stream.Length - trailingSectionStart); + int trailingSectionLength = (int)(_stream.Length - trailingSectionStart); bool needsMoveTrailingSections = !isRsrcIsLastSection && delta > 0; long finalImageSize = trailingSectionStart + Math.Max(delta, 0) + trailingSectionLength; - using (var mmap = MemoryMappedFile.CreateFromFile(stream, null, finalImageSize, MemoryMappedFileAccess.ReadWrite, HandleInheritability.None, true)) + using (var mmap = MemoryMappedFile.CreateFromFile(_stream, null, finalImageSize, MemoryMappedFileAccess.ReadWrite, HandleInheritability.None, true)) using (MemoryMappedViewAccessor accessor = mmap.CreateViewAccessor(0, finalImageSize, MemoryMappedFileAccess.ReadWrite)) { int peSignatureOffset = ReadI32(accessor, PEOffsets.DosStub.PESignatureOffset); @@ -327,19 +333,10 @@ private static void ThrowExceptionForInvalidUpdate() public void Dispose() { - Dispose(true); - GC.SuppressFinalize(this); - } - - private void Dispose(bool disposing) - { - if (disposing) + _reader.Dispose(); + if (!_leaveOpen) { - _reader.Dispose(); - if (!leaveOpen) - { - stream.Dispose(); - } + _stream.Dispose(); } } }