[wix-devs] #4574 - Payload path collisions

Sean Hall r.sean.hall at gmail.com
Mon Apr 5 08:48:15 PDT 2021


https://www.youtube.com/watch?v=JazFcSxfcXU (starts at 3:35, nothing
interesting)

Payloads and containers get their relative path from the Name attribute.
There are several scenarios for collisions:

1. Extracting a container for caching

This has no potential for collisions today because each payload is
extracted to a temporary path based on the stream name in the cab, which
have names like a0, a1, ..., and are different for each container.

2. Package Cache

When caching a package, all payloads are copied to
<PackageCache>/<CacheId>/<PayloadRelativePath>. Last one wins.

3. Extracting a container for the BA

When extracting the UX container to load the BA and bundle extensions, all
payloads are extracted to <random path>/.ba/<PayloadRelativePath>. Last one
wins.

4. Layout

The bundle (with the attached container attached) is laid out to <layout
directory>/<bundle>.exe.

Detached containers are laid out to <layout
directory>/<ContainerRelativePath>.

External payloads are laid out to <layout directory>/<PayloadRelativePath>.

Last one wins.

5. Dark.exe -x <extract directory> <bundle.exe>

This is the scenario that the bug is about.

All payloads in the UX container are extracted to <extract
directory>/UX/<PayloadRelativePath>.

All payloads in the attached container are extracted to <extract
directory>/AttachedContainer/<PayloadRelativePath>.

Last one wins.

------------------------------------------

A solution for 2 and 3 is to make sure that for every CacheId, every
payload has a unique Name. That doesn't fix 4 or 5 though, they probably
need to extract the contents differently. They could use the payload Id as
the filename, but that would stop users from being able to easily look at
the result and Burn would have to be modified to be able to find payloads
that way.


More information about the wix-devs mailing list