activescott / activescott/lessmsi

FilesToExtract Count Can Be Incorrect When Installer Contains Multiple CAB Files

Open
#119 4 comments 0 reactions 0 assignees View on GitHub
bug good first issue help wanted
Dominant language
C#
Stars
1.8k
Forks
188
PR merge metrics
No merged PRs in 30d

Description

In the code a new ExtractionProgress object is created in Wixtracts.cs like this:
`progress = new ExtractionProgress(progressCallback, filesToExtract.Length);
`

However, this assumes it should set the progress bar maximum value to "filesToExtract.Length"

The problem with this is if the MSI contains multiple CAB files with varying amounts of files in each (some being duplicates), the total can be incorrect.

The correct total can actually be obtained later on in the same source code where it's parsing/merging the CAB files. Something similar to this would work:

```
public static void ExtractFiles(Path msi, string outputDir, MsiFile[] filesToExtract, AsyncCallback progressCallback)
{
'REMOVED ORIGINAL CODE FOR CLARITY
int realTotalFilesToExtract = 0;
try
{
foreach (MSCabinet decompressor in cabDecompressors)
{
realTotalFilesToExtract += decompressor.GetFiles().Count();
}
}
'...
'REMOVED FOLLOWING CODE FOR CLARITY
}

```
I'm not suggesting you use this exact code. Besides being pretty crude it's also obvious at this point in the code the ExtractionProgress object has already been created and the total number of files set (incorrectly). So this chunk of code would need to be reworked to fix this.

An example MSI with this issue is here:
[https://github.com/hexxellor/TemporaryJunk/raw/master/LessMSI%20Issue/Example%20MSI%20With%20Multiple%20CABs.zip](https://github.com/hexxellor/TemporaryJunk/raw/master/LessMSI%20Issue/Example%20MSI%20With%20Multiple%20CABs.zip
)

**_If you need this file, please grab it and keep a copy right away. I can't promise I'll be hosting it for more a month (after January 7th, 2019)._**

Thanks.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.