Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: asar integration for require('node:child_process') #38742

Merged
merged 1 commit into from
Jun 14, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/asar/fs-wrapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -838,7 +838,7 @@ export const wrapFsWithAsar = (fs: Record<string, any>) => {
const originalModuleLoad = Module._load;
Module._load = (request: string, ...args: any[]) => {
const loadResult = originalModuleLoad(request, ...args);
if (request === 'child_process') {
if (request === 'child_process' || request === 'node:child_process') {
if (!asarReady.has(loadResult)) {
asarReady.add(loadResult);
// Just to make it obvious what we are dealing with here
Expand Down
115 changes: 60 additions & 55 deletions spec/asar-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1220,64 +1220,69 @@
});
});

describe('child_process.fork', function () {
itremote('opens a normal js file', async function () {
const child = require('child_process').fork(path.join(asarDir, 'a.asar', 'ping.js'));
child.send('message');
const msg = await new Promise(resolve => child.once('message', resolve));
expect(msg).to.equal('message');
});

itremote('supports asar in the forked js', async function (fixtures: string) {
const file = path.join(asarDir, 'a.asar', 'file1');
const child = require('child_process').fork(path.join(fixtures, 'module', 'asar.js'));
child.send(file);
const content = await new Promise(resolve => child.once('message', resolve));
expect(content).to.equal(fs.readFileSync(file).toString());
}, [fixtures]);
});

describe('child_process.exec', function () {
itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function () {
const echo = path.join(asarDir, 'echo.asar', 'echo');

const stdout = await promisify(require('child_process').exec)('echo ' + echo + ' foo bar');
expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
});
});

describe('child_process.execSync', function () {
itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function () {
const echo = path.join(asarDir, 'echo.asar', 'echo');

const stdout = require('child_process').execSync('echo ' + echo + ' foo bar');
expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
});
});

ifdescribe(process.platform === 'darwin' && process.arch !== 'arm64')('child_process.execFile', function () {
itremote('executes binaries', async function () {
const echo = path.join(asarDir, 'echo.asar', 'echo');
const stdout = await promisify(require('child_process').execFile)(echo, ['test']);
expect(stdout).to.equal('test\n');
});
function generateSpecs (childProcess: string) {
describe(`${childProcess}.fork`, function () {
itremote('opens a normal js file', async function (childProcess: string) {
const child = require(childProcess).fork(path.join(asarDir, 'a.asar', 'ping.js'));
child.send('message');
const msg = await new Promise(resolve => child.once('message', resolve));
expect(msg).to.equal('message');
}, [childProcess]);

itremote('supports asar in the forked js', async function (childProcess: string, fixtures: string) {
const file = path.join(asarDir, 'a.asar', 'file1');
const child = require(childProcess).fork(path.join(fixtures, 'module', 'asar.js'));
child.send(file);
const content = await new Promise(resolve => child.once('message', resolve));
expect(content).to.equal(fs.readFileSync(file).toString());
}, [childProcess, fixtures]);
});

describe(`${childProcess}.exec`, function () {
itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function (childProcess: string) {
const echo = path.join(asarDir, 'echo.asar', 'echo');

const stdout = await promisify(require(childProcess).exec)('echo ' + echo + ' foo bar');
expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
}, [childProcess]);
});

describe(`${childProcess}.execSync`, function () {
itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function (childProcess: string) {
const echo = path.join(asarDir, 'echo.asar', 'echo');

const stdout = require(childProcess).execSync('echo ' + echo + ' foo bar');
expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
}, [childProcess]);
});

ifdescribe(process.platform === 'darwin' && process.arch !== 'arm64')(`${childProcess}.execFile`, function () {
itremote('executes binaries', async function (childProcess: string) {
const echo = path.join(asarDir, 'echo.asar', 'echo');
const stdout = await promisify(require(childProcess).execFile)(echo, ['test']);
expect(stdout).to.equal('test\n');
}, [childProcess]);

Check failure on line 1265 in spec/asar-spec.ts

View check run for this annotation

trop / Backportable? - 26-x-y

spec/asar-spec.ts#L1225-L1265

Patch Conflict
Raw output
++<<<<<<< HEAD
 +    ifdescribe(features.isRunAsNodeEnabled())('child_process.fork', function () {
 +      itremote('opens a normal js file', async function () {
 +        const child = require('child_process').fork(path.join(asarDir, 'a.asar', 'ping.js'));
 +        child.send('message');
 +        const msg = await new Promise(resolve => child.once('message', resolve));
 +        expect(msg).to.equal('message');
 +      });
 +
 +      itremote('supports asar in the forked js', async function (fixtures: string) {
 +        const file = path.join(asarDir, 'a.asar', 'file1');
 +        const child = require('child_process').fork(path.join(fixtures, 'module', 'asar.js'));
 +        child.send(file);
 +        const content = await new Promise(resolve => child.once('message', resolve));
 +        expect(content).to.equal(fs.readFileSync(file).toString());
 +      }, [fixtures]);
 +    });
 +
 +    describe('child_process.exec', function () {
 +      itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function () {
 +        const echo = path.join(asarDir, 'echo.asar', 'echo');
 +
 +        const stdout = await promisify(require('child_process').exec)('echo ' + echo + ' foo bar');
 +        expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
 +      });
 +    });
 +
 +    describe('child_process.execSync', function () {
 +      itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function () {
 +        const echo = path.join(asarDir, 'echo.asar', 'echo');
 +
 +        const stdout = require('child_process').execSync('echo ' + echo + ' foo bar');
 +        expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
 +      });
 +    });
 +
 +    ifdescribe(process.platform === 'darwin' && process.arch !== 'arm64')('child_process.execFile', function () {
 +      itremote('executes binaries', async function () {
 +        const echo = path.join(asarDir, 'echo.asar', 'echo');
 +        const stdout = await promisify(require('child_process').execFile)(echo, ['test']);
 +        expect(stdout).to.equal('test\n');
 +      });
++=======
+     function generateSpecs (childProcess: string) {
+       describe(`${childProcess}.fork`, function () {
+         itremote('opens a normal js file', async function (childProcess: string) {
+           const child = require(childProcess).fork(path.join(asarDir, 'a.asar', 'ping.js'));
+           child.send('message');
+           const msg = await new Promise(resolve => child.once('message', resolve));
+           expect(msg).to.equal('message');
+         }, [childProcess]);
+ 
+         itremote('supports asar in the forked js', async function (childProcess: string, fixtures: string) {
+           const file = path.join(asarDir, 'a.asar', 'file1');
+           const child = require(childProcess).fork(path.join(fixtures, 'module', 'asar.js'));
+           child.send(file);
+           const content = await new Promise(resolve => child.once('message', resolve));
+           expect(content).to.equal(fs.readFileSync(file).toString());
+         }, [childProcess, fixtures]);
+       });
+ 
+       describe(`${childProcess}.exec`, function () {
+         itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+ 
+           const stdout = await promisify(require(childProcess).exec)('echo ' + echo + ' foo bar');
+           expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
+         }, [childProcess]);
+       });
+ 
+       describe(`${childProcess}.execSync`, function () {
+         itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+ 
+           const stdout = require(childProcess).execSync('echo ' + echo + ' foo bar');
+           expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
+         }, [childProcess]);
+       });
+ 
+       ifdescribe(process.platform === 'darwin' && process.arch !== 'arm64')(`${childProcess}.execFile`, function () {
+         itremote('executes binaries', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+           const stdout = await promisify(require(childProcess).execFile)(echo, ['test']);
+           expect(stdout).to.equal('test\n');
+         }, [childProcess]);
+ 
+         itremote('executes binaries without callback', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+           const process = require(childProcess).execFile(echo, ['test']);
+           const code = await new Promise(resolve => process.once('close', resolve));
+           expect(code).to.equal(0);
+           process.on('error', function () {
+             throw new Error('error');
+           });
+         }, [childProcess]);
++>>>>>>> fix: asar integration for require('node:child_process')

Check failure on line 1265 in spec/asar-spec.ts

View check run for this annotation

trop / Backportable? - 26-x-y

spec/asar-spec.ts#L1225-L1265

Patch Conflict
Raw output
++<<<<<<< HEAD
 +    ifdescribe(features.isRunAsNodeEnabled())('child_process.fork', function () {
 +      itremote('opens a normal js file', async function () {
 +        const child = require('child_process').fork(path.join(asarDir, 'a.asar', 'ping.js'));
 +        child.send('message');
 +        const msg = await new Promise(resolve => child.once('message', resolve));
 +        expect(msg).to.equal('message');
 +      });
 +
 +      itremote('supports asar in the forked js', async function (fixtures: string) {
 +        const file = path.join(asarDir, 'a.asar', 'file1');
 +        const child = require('child_process').fork(path.join(fixtures, 'module', 'asar.js'));
 +        child.send(file);
 +        const content = await new Promise(resolve => child.once('message', resolve));
 +        expect(content).to.equal(fs.readFileSync(file).toString());
 +      }, [fixtures]);
 +    });
 +
 +    describe('child_process.exec', function () {
 +      itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function () {
 +        const echo = path.join(asarDir, 'echo.asar', 'echo');
 +
 +        const stdout = await promisify(require('child_process').exec)('echo ' + echo + ' foo bar');
 +        expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
 +      });
 +    });
 +
 +    describe('child_process.execSync', function () {
 +      itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function () {
 +        const echo = path.join(asarDir, 'echo.asar', 'echo');
 +
 +        const stdout = require('child_process').execSync('echo ' + echo + ' foo bar');
 +        expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
 +      });
 +    });
 +
 +    ifdescribe(process.platform === 'darwin' && process.arch !== 'arm64')('child_process.execFile', function () {
 +      itremote('executes binaries', async function () {
 +        const echo = path.join(asarDir, 'echo.asar', 'echo');
 +        const stdout = await promisify(require('child_process').execFile)(echo, ['test']);
 +        expect(stdout).to.equal('test\n');
 +      });
++=======
+     function generateSpecs (childProcess: string) {
+       describe(`${childProcess}.fork`, function () {
+         itremote('opens a normal js file', async function (childProcess: string) {
+           const child = require(childProcess).fork(path.join(asarDir, 'a.asar', 'ping.js'));
+           child.send('message');
+           const msg = await new Promise(resolve => child.once('message', resolve));
+           expect(msg).to.equal('message');
+         }, [childProcess]);
+ 
+         itremote('supports asar in the forked js', async function (childProcess: string, fixtures: string) {
+           const file = path.join(asarDir, 'a.asar', 'file1');
+           const child = require(childProcess).fork(path.join(fixtures, 'module', 'asar.js'));
+           child.send(file);
+           const content = await new Promise(resolve => child.once('message', resolve));
+           expect(content).to.equal(fs.readFileSync(file).toString());
+         }, [childProcess, fixtures]);
+       });
+ 
+       describe(`${childProcess}.exec`, function () {
+         itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+ 
+           const stdout = await promisify(require(childProcess).exec)('echo ' + echo + ' foo bar');
+           expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
+         }, [childProcess]);
+       });
+ 
+       describe(`${childProcess}.execSync`, function () {
+         itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+ 
+           const stdout = require(childProcess).execSync('echo ' + echo + ' foo bar');
+           expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
+         }, [childProcess]);
+       });
+ 
+       ifdescribe(process.platform === 'darwin' && process.arch !== 'arm64')(`${childProcess}.execFile`, function () {
+         itremote('executes binaries', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+           const stdout = await promisify(require(childProcess).execFile)(echo, ['test']);
+           expect(stdout).to.equal('test\n');
+         }, [childProcess]);
+ 
+         itremote('executes binaries without callback', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+           const process = require(childProcess).execFile(echo, ['test']);
+           const code = await new Promise(resolve => process.once('close', resolve));
+           expect(code).to.equal(0);
+           process.on('error', function () {
+             throw new Error('error');
+           });
+         }, [childProcess]);
++>>>>>>> fix: asar integration for require('node:child_process')
itremote('executes binaries without callback', async function (childProcess: string) {
const echo = path.join(asarDir, 'echo.asar', 'echo');
const process = require(childProcess).execFile(echo, ['test']);

Check failure on line 1268 in spec/asar-spec.ts

View check run for this annotation

trop / Backportable? - 24-x-y

spec/asar-spec.ts#L1228-L1268

Patch Conflict
Raw output
++<<<<<<< HEAD
 +    ifdescribe(features.isRunAsNodeEnabled())('child_process.fork', function () {
 +      itremote('opens a normal js file', async function () {
 +        const child = require('child_process').fork(path.join(asarDir, 'a.asar', 'ping.js'));
 +        child.send('message');
 +        const msg = await new Promise(resolve => child.once('message', resolve));
 +        expect(msg).to.equal('message');
 +      });
 +
 +      itremote('supports asar in the forked js', async function (fixtures: string) {
 +        const file = path.join(asarDir, 'a.asar', 'file1');
 +        const child = require('child_process').fork(path.join(fixtures, 'module', 'asar.js'));
 +        child.send(file);
 +        const content = await new Promise(resolve => child.once('message', resolve));
 +        expect(content).to.equal(fs.readFileSync(file).toString());
 +      }, [fixtures]);
 +    });
 +
 +    describe('child_process.exec', function () {
 +      itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function () {
 +        const echo = path.join(asarDir, 'echo.asar', 'echo');
 +
 +        const stdout = await promisify(require('child_process').exec)('echo ' + echo + ' foo bar');
 +        expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
 +      });
 +    });
 +
 +    describe('child_process.execSync', function () {
 +      itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function () {
 +        const echo = path.join(asarDir, 'echo.asar', 'echo');
 +
 +        const stdout = require('child_process').execSync('echo ' + echo + ' foo bar');
 +        expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
 +      });
 +    });
 +
 +    ifdescribe(process.platform === 'darwin' && process.arch !== 'arm64')('child_process.execFile', function () {
 +      itremote('executes binaries', async function () {
 +        const echo = path.join(asarDir, 'echo.asar', 'echo');
 +        const stdout = await promisify(require('child_process').execFile)(echo, ['test']);
 +        expect(stdout).to.equal('test\n');
 +      });
++=======
+     function generateSpecs (childProcess: string) {
+       describe(`${childProcess}.fork`, function () {
+         itremote('opens a normal js file', async function (childProcess: string) {
+           const child = require(childProcess).fork(path.join(asarDir, 'a.asar', 'ping.js'));
+           child.send('message');
+           const msg = await new Promise(resolve => child.once('message', resolve));
+           expect(msg).to.equal('message');
+         }, [childProcess]);
+ 
+         itremote('supports asar in the forked js', async function (childProcess: string, fixtures: string) {
+           const file = path.join(asarDir, 'a.asar', 'file1');
+           const child = require(childProcess).fork(path.join(fixtures, 'module', 'asar.js'));
+           child.send(file);
+           const content = await new Promise(resolve => child.once('message', resolve));
+           expect(content).to.equal(fs.readFileSync(file).toString());
+         }, [childProcess, fixtures]);
+       });
+ 
+       describe(`${childProcess}.exec`, function () {
+         itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+ 
+           const stdout = await promisify(require(childProcess).exec)('echo ' + echo + ' foo bar');
+           expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
+         }, [childProcess]);
+       });
+ 
+       describe(`${childProcess}.execSync`, function () {
+         itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+ 
+           const stdout = require(childProcess).execSync('echo ' + echo + ' foo bar');
+           expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
+         }, [childProcess]);
+       });
+ 
+       ifdescribe(process.platform === 'darwin' && process.arch !== 'arm64')(`${childProcess}.execFile`, function () {
+         itremote('executes binaries', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+           const stdout = await promisify(require(childProcess).execFile)(echo, ['test']);
+           expect(stdout).to.equal('test\n');
+         }, [childProcess]);
+ 
+         itremote('executes binaries without callback', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+           const process = require(childProcess).execFile(echo, ['test']);
+           const code = await new Promise(resolve => process.once('close', resolve));
+           expect(code).to.equal(0);
+           process.on('error', function () {
+             throw new Error('error');
+           });
+         }, [childProcess]);
++>>>>>>> fix: asar integration for require('node:child_process')

Check failure on line 1268 in spec/asar-spec.ts

View check run for this annotation

trop / Backportable? - 24-x-y

spec/asar-spec.ts#L1228-L1268

Patch Conflict
Raw output
++<<<<<<< HEAD
 +    ifdescribe(features.isRunAsNodeEnabled())('child_process.fork', function () {
 +      itremote('opens a normal js file', async function () {
 +        const child = require('child_process').fork(path.join(asarDir, 'a.asar', 'ping.js'));
 +        child.send('message');
 +        const msg = await new Promise(resolve => child.once('message', resolve));
 +        expect(msg).to.equal('message');
 +      });
 +
 +      itremote('supports asar in the forked js', async function (fixtures: string) {
 +        const file = path.join(asarDir, 'a.asar', 'file1');
 +        const child = require('child_process').fork(path.join(fixtures, 'module', 'asar.js'));
 +        child.send(file);
 +        const content = await new Promise(resolve => child.once('message', resolve));
 +        expect(content).to.equal(fs.readFileSync(file).toString());
 +      }, [fixtures]);
 +    });
 +
 +    describe('child_process.exec', function () {
 +      itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function () {
 +        const echo = path.join(asarDir, 'echo.asar', 'echo');
 +
 +        const stdout = await promisify(require('child_process').exec)('echo ' + echo + ' foo bar');
 +        expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
 +      });
 +    });
 +
 +    describe('child_process.execSync', function () {
 +      itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function () {
 +        const echo = path.join(asarDir, 'echo.asar', 'echo');
 +
 +        const stdout = require('child_process').execSync('echo ' + echo + ' foo bar');
 +        expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
 +      });
 +    });
 +
 +    ifdescribe(process.platform === 'darwin' && process.arch !== 'arm64')('child_process.execFile', function () {
 +      itremote('executes binaries', async function () {
 +        const echo = path.join(asarDir, 'echo.asar', 'echo');
 +        const stdout = await promisify(require('child_process').execFile)(echo, ['test']);
 +        expect(stdout).to.equal('test\n');
 +      });
++=======
+     function generateSpecs (childProcess: string) {
+       describe(`${childProcess}.fork`, function () {
+         itremote('opens a normal js file', async function (childProcess: string) {
+           const child = require(childProcess).fork(path.join(asarDir, 'a.asar', 'ping.js'));
+           child.send('message');
+           const msg = await new Promise(resolve => child.once('message', resolve));
+           expect(msg).to.equal('message');
+         }, [childProcess]);
+ 
+         itremote('supports asar in the forked js', async function (childProcess: string, fixtures: string) {
+           const file = path.join(asarDir, 'a.asar', 'file1');
+           const child = require(childProcess).fork(path.join(fixtures, 'module', 'asar.js'));
+           child.send(file);
+           const content = await new Promise(resolve => child.once('message', resolve));
+           expect(content).to.equal(fs.readFileSync(file).toString());
+         }, [childProcess, fixtures]);
+       });
+ 
+       describe(`${childProcess}.exec`, function () {
+         itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+ 
+           const stdout = await promisify(require(childProcess).exec)('echo ' + echo + ' foo bar');
+           expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
+         }, [childProcess]);
+       });
+ 
+       describe(`${childProcess}.execSync`, function () {
+         itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+ 
+           const stdout = require(childProcess).execSync('echo ' + echo + ' foo bar');
+           expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
+         }, [childProcess]);
+       });
+ 
+       ifdescribe(process.platform === 'darwin' && process.arch !== 'arm64')(`${childProcess}.execFile`, function () {
+         itremote('executes binaries', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+           const stdout = await promisify(require(childProcess).execFile)(echo, ['test']);
+           expect(stdout).to.equal('test\n');
+         }, [childProcess]);
+ 
+         itremote('executes binaries without callback', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+           const process = require(childProcess).execFile(echo, ['test']);
+           const code = await new Promise(resolve => process.once('close', resolve));
+           expect(code).to.equal(0);
+           process.on('error', function () {
+             throw new Error('error');
+           });
+         }, [childProcess]);
++>>>>>>> fix: asar integration for require('node:child_process')

Check failure on line 1268 in spec/asar-spec.ts

View check run for this annotation

trop / Backportable? - 25-x-y

spec/asar-spec.ts#L1228-L1268

Patch Conflict
Raw output
++<<<<<<< HEAD
 +    ifdescribe(features.isRunAsNodeEnabled())('child_process.fork', function () {
 +      itremote('opens a normal js file', async function () {
 +        const child = require('child_process').fork(path.join(asarDir, 'a.asar', 'ping.js'));
 +        child.send('message');
 +        const msg = await new Promise(resolve => child.once('message', resolve));
 +        expect(msg).to.equal('message');
 +      });
 +
 +      itremote('supports asar in the forked js', async function (fixtures: string) {
 +        const file = path.join(asarDir, 'a.asar', 'file1');
 +        const child = require('child_process').fork(path.join(fixtures, 'module', 'asar.js'));
 +        child.send(file);
 +        const content = await new Promise(resolve => child.once('message', resolve));
 +        expect(content).to.equal(fs.readFileSync(file).toString());
 +      }, [fixtures]);
 +    });
 +
 +    describe('child_process.exec', function () {
 +      itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function () {
 +        const echo = path.join(asarDir, 'echo.asar', 'echo');
 +
 +        const stdout = await promisify(require('child_process').exec)('echo ' + echo + ' foo bar');
 +        expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
 +      });
 +    });
 +
 +    describe('child_process.execSync', function () {
 +      itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function () {
 +        const echo = path.join(asarDir, 'echo.asar', 'echo');
 +
 +        const stdout = require('child_process').execSync('echo ' + echo + ' foo bar');
 +        expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
 +      });
 +    });
 +
 +    ifdescribe(process.platform === 'darwin' && process.arch !== 'arm64')('child_process.execFile', function () {
 +      itremote('executes binaries', async function () {
 +        const echo = path.join(asarDir, 'echo.asar', 'echo');
 +        const stdout = await promisify(require('child_process').execFile)(echo, ['test']);
 +        expect(stdout).to.equal('test\n');
 +      });
++=======
+     function generateSpecs (childProcess: string) {
+       describe(`${childProcess}.fork`, function () {
+         itremote('opens a normal js file', async function (childProcess: string) {
+           const child = require(childProcess).fork(path.join(asarDir, 'a.asar', 'ping.js'));
+           child.send('message');
+           const msg = await new Promise(resolve => child.once('message', resolve));
+           expect(msg).to.equal('message');
+         }, [childProcess]);
+ 
+         itremote('supports asar in the forked js', async function (childProcess: string, fixtures: string) {
+           const file = path.join(asarDir, 'a.asar', 'file1');
+           const child = require(childProcess).fork(path.join(fixtures, 'module', 'asar.js'));
+           child.send(file);
+           const content = await new Promise(resolve => child.once('message', resolve));
+           expect(content).to.equal(fs.readFileSync(file).toString());
+         }, [childProcess, fixtures]);
+       });
+ 
+       describe(`${childProcess}.exec`, function () {
+         itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+ 
+           const stdout = await promisify(require(childProcess).exec)('echo ' + echo + ' foo bar');
+           expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
+         }, [childProcess]);
+       });
+ 
+       describe(`${childProcess}.execSync`, function () {
+         itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+ 
+           const stdout = require(childProcess).execSync('echo ' + echo + ' foo bar');
+           expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
+         }, [childProcess]);
+       });
+ 
+       ifdescribe(process.platform === 'darwin' && process.arch !== 'arm64')(`${childProcess}.execFile`, function () {
+         itremote('executes binaries', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+           const stdout = await promisify(require(childProcess).execFile)(echo, ['test']);
+           expect(stdout).to.equal('test\n');
+         }, [childProcess]);
+ 
+         itremote('executes binaries without callback', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+           const process = require(childProcess).execFile(echo, ['test']);
+           const code = await new Promise(resolve => process.once('close', resolve));
+           expect(code).to.equal(0);
+           process.on('error', function () {
+             throw new Error('error');
+           });
+         }, [childProcess]);
++>>>>>>> fix: asar integration for require('node:child_process')

Check failure on line 1268 in spec/asar-spec.ts

View check run for this annotation

trop / Backportable? - 25-x-y

spec/asar-spec.ts#L1228-L1268

Patch Conflict
Raw output
++<<<<<<< HEAD
 +    ifdescribe(features.isRunAsNodeEnabled())('child_process.fork', function () {
 +      itremote('opens a normal js file', async function () {
 +        const child = require('child_process').fork(path.join(asarDir, 'a.asar', 'ping.js'));
 +        child.send('message');
 +        const msg = await new Promise(resolve => child.once('message', resolve));
 +        expect(msg).to.equal('message');
 +      });
 +
 +      itremote('supports asar in the forked js', async function (fixtures: string) {
 +        const file = path.join(asarDir, 'a.asar', 'file1');
 +        const child = require('child_process').fork(path.join(fixtures, 'module', 'asar.js'));
 +        child.send(file);
 +        const content = await new Promise(resolve => child.once('message', resolve));
 +        expect(content).to.equal(fs.readFileSync(file).toString());
 +      }, [fixtures]);
 +    });
 +
 +    describe('child_process.exec', function () {
 +      itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function () {
 +        const echo = path.join(asarDir, 'echo.asar', 'echo');
 +
 +        const stdout = await promisify(require('child_process').exec)('echo ' + echo + ' foo bar');
 +        expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
 +      });
 +    });
 +
 +    describe('child_process.execSync', function () {
 +      itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function () {
 +        const echo = path.join(asarDir, 'echo.asar', 'echo');
 +
 +        const stdout = require('child_process').execSync('echo ' + echo + ' foo bar');
 +        expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
 +      });
 +    });
 +
 +    ifdescribe(process.platform === 'darwin' && process.arch !== 'arm64')('child_process.execFile', function () {
 +      itremote('executes binaries', async function () {
 +        const echo = path.join(asarDir, 'echo.asar', 'echo');
 +        const stdout = await promisify(require('child_process').execFile)(echo, ['test']);
 +        expect(stdout).to.equal('test\n');
 +      });
++=======
+     function generateSpecs (childProcess: string) {
+       describe(`${childProcess}.fork`, function () {
+         itremote('opens a normal js file', async function (childProcess: string) {
+           const child = require(childProcess).fork(path.join(asarDir, 'a.asar', 'ping.js'));
+           child.send('message');
+           const msg = await new Promise(resolve => child.once('message', resolve));
+           expect(msg).to.equal('message');
+         }, [childProcess]);
+ 
+         itremote('supports asar in the forked js', async function (childProcess: string, fixtures: string) {
+           const file = path.join(asarDir, 'a.asar', 'file1');
+           const child = require(childProcess).fork(path.join(fixtures, 'module', 'asar.js'));
+           child.send(file);
+           const content = await new Promise(resolve => child.once('message', resolve));
+           expect(content).to.equal(fs.readFileSync(file).toString());
+         }, [childProcess, fixtures]);
+       });
+ 
+       describe(`${childProcess}.exec`, function () {
+         itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+ 
+           const stdout = await promisify(require(childProcess).exec)('echo ' + echo + ' foo bar');
+           expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
+         }, [childProcess]);
+       });
+ 
+       describe(`${childProcess}.execSync`, function () {
+         itremote('should not try to extract the command if there is a reference to a file inside an .asar', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+ 
+           const stdout = require(childProcess).execSync('echo ' + echo + ' foo bar');
+           expect(stdout.toString().replace(/\r/g, '')).to.equal(echo + ' foo bar\n');
+         }, [childProcess]);
+       });
+ 
+       ifdescribe(process.platform === 'darwin' && process.arch !== 'arm64')(`${childProcess}.execFile`, function () {
+         itremote('executes binaries', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+           const stdout = await promisify(require(childProcess).execFile)(echo, ['test']);
+           expect(stdout).to.equal('test\n');
+         }, [childProcess]);
+ 
+         itremote('executes binaries without callback', async function (childProcess: string) {
+           const echo = path.join(asarDir, 'echo.asar', 'echo');
+           const process = require(childProcess).execFile(echo, ['test']);
+           const code = await new Promise(resolve => process.once('close', resolve));
+           expect(code).to.equal(0);
+           process.on('error', function () {
+             throw new Error('error');
+           });
+         }, [childProcess]);
++>>>>>>> fix: asar integration for require('node:child_process')
const code = await new Promise(resolve => process.once('close', resolve));
expect(code).to.equal(0);
process.on('error', function () {
throw new Error('error');
});
}, [childProcess]);

itremote('executes binaries without callback', async function () {
const echo = path.join(asarDir, 'echo.asar', 'echo');
const process = require('child_process').execFile(echo, ['test']);
const code = await new Promise(resolve => process.once('close', resolve));
expect(code).to.equal(0);
process.on('error', function () {
throw new Error('error');
});
itremote('execFileSync executes binaries', function (childProcess: string) {
const echo = path.join(asarDir, 'echo.asar', 'echo');
const output = require(childProcess).execFileSync(echo, ['test']);
expect(String(output)).to.equal('test\n');
}, [childProcess]);
});
}

itremote('execFileSync executes binaries', function () {
const echo = path.join(asarDir, 'echo.asar', 'echo');
const output = require('child_process').execFileSync(echo, ['test']);
expect(String(output)).to.equal('test\n');
});
});
generateSpecs('child_process');
generateSpecs('node:child_process');

describe('internalModuleReadJSON', function () {
itremote('reads a normal file', function () {
Expand Down