{
  "WorkItem": {
    "AffectedComponent": {
      "Name": "",
      "DisplayName": ""
    },
    "ClosedComment": "Fixed in change set 27055.  This will intially be available in the v1.7.1.6 preview release.",
    "ClosedDate": "2008-12-18T15:58:51.51-08:00",
    "CommentCount": 0,
    "Custom": null,
    "Description": "Hello,\nWhen I called ExtractAll in a thread and Save in another thread,  BadCrcException (CRC read xxx while excpected yyy stuf...) is raised while extracting. Since zip files I deal with are very large, I must used multi-threading. I do not have the BadCrcException when the called of ExtractAll and Save are made in a non multi-thread scenario. I do not know what should be \"locked\" to avoid the exception to be raised. I locked on my event handlers but I do not want to lock the call of ExtractAll and Save, so I'll be able to made more than 1 extraction/compression at the same time. I use the last pre-release 1.7.1.5 version.\n \nIs the static private field (private static UInt32[] crc32Table) in the CRC32 class have something to do with this ?\n \nThanks!",
    "LastUpdatedDate": "2013-05-16T05:32:34.937-07:00",
    "PlannedForRelease": "",
    "ReleaseVisibleToPublic": false,
    "Priority": {
      "Name": "Low",
      "Severity": 50,
      "Id": 1
    },
    "ProjectName": "DotNetZip",
    "ReportedDate": "2008-11-21T06:05:17.22-08:00",
    "Status": {
      "Name": "Closed",
      "Id": 4
    },
    "ReasonClosed": {
      "Name": "Unassigned"
    },
    "Summary": "BadCrcException while Extracting and Compressing at the same time...",
    "Type": {
      "Name": "Issue",
      "Id": 3
    },
    "VoteCount": 1,
    "Id": 6637
  },
  "FileAttachments": [],
  "Comments": [
    {
      "Message": "Unhandled Exception: Ionic.Utils.Zip.BadCrcException: CRC error: the file being extracted appears to be corrupted. Expected 0xB3EE5256, actual 0x3DC1FD49\r\n   at Ionic.Utils.Zip.ZipEntry.InternalExtract(String baseDir, Stream outstream, String password) in c:\\dinoch\\dev\\dotnet\\zip\\DotNetZip\\Library\\ZipEntry.cs:line\r\n 1492\r\n   at Ionic.Utils.Zip.ZipEntry.Extract(String baseDirectory, Boolean overwrite) in c:\\dinoch\\dev\\dotnet\\zip\\DotNetZip\\Library\\ZipEntry.cs:line 1100\r\n   at Ionic.Utils.Zip.ZipFile.ExtractAll(String path, Boolean wantOverwrite) in c:\\dinoch\\dev\\dotnet\\zip\\DotNetZip\\Library\\ZipFile.cs:line 4325\r\n   at Ionic.Zip.Tests.ThreadedUnzip.processZip(Object o) in c:\\dinoch\\dev\\dotnet\\zip\\test\\ThreadedUnzip.cs:line 84\r\n   at System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(Object state)\r\n   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)\r\n   at System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(_ThreadPoolWaitCallback tpWaitCallBack)\r\n   at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object state)\r\n",
      "PostedDate": "2008-12-18T15:24:02.247-08:00",
      "Id": -2147483648
    },
    {
      "Message": "Yes - good catch ikharus.  The crc32Table is initialized in the instance constructor, which is wrong. It should be initialized in the static constructor.  If you simply change the Crc32.cs module - replace \"public CRC32() {\"  ...  with \"static CRC32() {\"  you will avoid this problem. \r\n",
      "PostedDate": "2008-12-18T15:53:35.417-08:00",
      "Id": -2147483648
    },
    {
      "Message": "",
      "PostedDate": "2008-12-18T15:58:51.51-08:00",
      "Id": -2147483648
    },
    {
      "Message": "",
      "PostedDate": "2013-02-21T18:44:35.73-08:00",
      "Id": -2147483648
    },
    {
      "Message": "",
      "PostedDate": "2013-05-16T05:32:34.937-07:00",
      "Id": -2147483648
    }
  ]
}