[wix-devs] #4574 - Payload path collisions
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
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
The bundle (with the attached container attached) is laid out to <layout
Detached containers are laid out to <layout
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
All payloads in the attached container are extracted to <extract
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
More information about the wix-devs