Fix crash when loading read-only ReadWriteZipFiles.

This commit is contained in:
Paul Chote
2017-07-07 20:42:16 +00:00
committed by RoosterDragon
parent ab1a798d04
commit f7c57cfc6f

View File

@@ -99,16 +99,12 @@ namespace OpenRA.FileSystem
{
readonly MemoryStream pkgStream;
public ReadWriteZipFile(Stream stream, string filename)
public ReadWriteZipFile(string filename, bool truncate = false)
{
// SharpZipLib breaks when asked to update archives loaded from outside streams or files
// We can work around this by creating a clean in-memory-only file, cutting all outside references
pkgStream = new MemoryStream();
if (stream != null)
{
stream.CopyTo(pkgStream);
stream.Dispose();
}
pkgStream = File.Exists(filename) && !truncate ?
new MemoryStream(File.ReadAllBytes(filename)) : new MemoryStream();
pkgStream.Position = 0;
pkg = ZipFileHelper.Create(pkgStream);
@@ -225,14 +221,13 @@ namespace OpenRA.FileSystem
return false;
}
var s = new FileStream(filename, FileMode.Open);
package = new ReadWriteZipFile(s, filename);
package = new ReadWriteZipFile(filename);
return true;
}
public static IReadWritePackage Create(string filename)
{
return new ReadWriteZipFile(null, filename);
return new ReadWriteZipFile(filename, true);
}
}
}