If a patch is to be generated which could be applied on two versions in conjunction with the option -delta an ArgumentOutOfRangeException is thrown in the method "CreateArrayOfStringA" - but only if this involves two files with different "patch situations".
For example file "A" different in version of 1.0.0 (==RTM), 1.0.1 (==Patch1) and 1.0.2 (target version) and a file "B" only different in 1.0.0 and 1.0.1 but identical to 1.0.1 in the target version 1.0.2.
My impression is that perhaps the PatchAPIMarshaller might be reusing an obselete value in its member "oldFileCount" and that maybe just the check in line 700
this.oldFileCount != managed.Length
is superfluous - especially as the next line of code is:
this.oldFileCount = managed.Length;
I have created a small example for reproduction (see attachment).
This code is my code. I'm looking at this repro now