1 Commits

Author SHA1 Message Date
Koushik Dutta
fddff57c15 fix: arm64/x64 inputs may contain universal binaries that are not the same (#62)
* Mach-O types are in big endian format

One of my dependencies for some reason has two universal binaries per platform, and they are not exactly the same bytewise. I'm unsure why. But I am certain they are functional.

In any case, this error is erroneously being thrown since it fails the previous byte comparison match.

```ts
      throw new Error(`Can't reconcile two non-macho files ${file}`);
```

CAFEBABE and FEEDFACE magics for universal binaries. This will allow packaging to continue if both the arm and x64 packages have universal binaries.

* Update asar-utils.ts

* Update asar-utils.ts
2023-06-24 23:09:09 -07:00

View File

@@ -33,6 +33,12 @@ const MACHO_MAGIC = new Set([
0xcffaedfe, 0xcffaedfe,
]); ]);
const MACHO_UNIVERSAL_MAGIC = new Set([
// universal
0xcafebabe,
0xbebafeca,
]);
export const detectAsarMode = async (appPath: string) => { export const detectAsarMode = async (appPath: string) => {
d('checking asar mode of', appPath); d('checking asar mode of', appPath);
const asarPath = path.resolve(appPath, 'Contents', 'Resources', 'app.asar'); const asarPath = path.resolve(appPath, 'Contents', 'Resources', 'app.asar');
@@ -147,6 +153,10 @@ export const mergeASARs = async ({
continue; continue;
} }
if (MACHO_UNIVERSAL_MAGIC.has(x64Content.readUInt32LE(0)) && MACHO_UNIVERSAL_MAGIC.has(arm64Content.readUInt32LE(0))) {
continue;
}
if (!MACHO_MAGIC.has(x64Content.readUInt32LE(0))) { if (!MACHO_MAGIC.has(x64Content.readUInt32LE(0))) {
throw new Error(`Can't reconcile two non-macho files ${file}`); throw new Error(`Can't reconcile two non-macho files ${file}`);
} }