Fix stream leak when failing to open a zip file
[mono.git] / mcs / class / System.IO.Compression / ZipArchive.cs
index b2d6e2f4bfe0e32851ad9e043ac5d666a4f71e9e..e261da5d76617fdd181f88a7654b51801ec5220e 100644 (file)
@@ -70,7 +70,18 @@ namespace System.IO.Compression
                        this.stream = stream;
                        this.mode = mode;
                        leaveStreamOpen = leaveOpen;
-                       CreateZip(stream, mode);
+
+                       try
+                       {
+                               CreateZip(stream, mode);
+                       }
+                       catch
+                       {
+                               if (!leaveOpen)
+                                       stream.Dispose();
+
+                               throw;
+                       }
                }
 
                public ZipArchive (Stream stream, ZipArchiveMode mode, bool leaveOpen, Encoding entryNameEncoding)
@@ -82,7 +93,18 @@ namespace System.IO.Compression
                        this.mode = mode;
                        leaveStreamOpen = leaveOpen;
                        this.entryNameEncoding = entryNameEncoding;
-                       CreateZip(stream, mode);
+
+                       try
+                       {
+                               CreateZip(stream, mode);
+                       }
+                       catch
+                       {
+                               if (!leaveOpen)
+                                       stream.Dispose();
+
+                               throw;
+                       }
                }
 
                private void CreateZip(Stream stream, ZipArchiveMode mode)