fix: JS Task Runner not having access to Buffer (no-changelog) (#11285)
Some checks are pending
Test Master / install-and-build (push) Waiting to run
Test Master / Unit tests (18.x) (push) Blocked by required conditions
Test Master / Unit tests (20.x) (push) Blocked by required conditions
Test Master / Unit tests (22.4) (push) Blocked by required conditions
Test Master / Lint (push) Blocked by required conditions
Test Master / Notify Slack on failure (push) Blocked by required conditions

This commit is contained in:
Val 2024-10-16 17:51:06 +01:00 committed by GitHub
parent d37acdb873
commit 5c370c9235
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 26 additions and 3 deletions

View file

@ -281,6 +281,20 @@ describe('JsTaskRunner', () => {
expect(outcome.result).toEqual([wrapIntoJson({ val: undefined })]); expect(outcome.result).toEqual([wrapIntoJson({ val: undefined })]);
}); });
}); });
it('should allow access to Node.js Buffers', async () => {
const outcome = await execTaskWithParams({
task: newTaskWithSettings({
code: 'return { val: Buffer.from("test-buffer").toString() }',
nodeMode: 'runOnceForAllItems',
}),
taskData: newAllCodeTaskData(inputItems.map(wrapIntoJson), {
envProviderState: undefined,
}),
});
expect(outcome.result).toEqual([wrapIntoJson({ val: 'test-buffer' })]);
});
}); });
describe('runOnceForAllItems', () => { describe('runOnceForAllItems', () => {
@ -755,8 +769,6 @@ describe('JsTaskRunner', () => {
}, },
}), }),
); );
console.log('DONE');
}, 1000); }, 1000);
}); });
}); });

View file

@ -181,6 +181,17 @@ export class JsTaskRunner extends TaskRunner {
module: {}, module: {},
console: customConsole, console: customConsole,
// Exposed Node.js globals in vm2
Buffer,
Function,
eval,
setTimeout,
setInterval,
setImmediate,
clearTimeout,
clearInterval,
clearImmediate,
items: inputItems, items: inputItems,
...dataProxy, ...dataProxy,
...this.buildRpcCallObject(taskId), ...this.buildRpcCallObject(taskId),
@ -188,7 +199,7 @@ export class JsTaskRunner extends TaskRunner {
try { try {
const result = (await runInNewContext( const result = (await runInNewContext(
`module.exports = async function VmCodeWrapper() {${settings.code}\n}()`, `globalThis.global = globalThis; module.exports = async function VmCodeWrapper() {${settings.code}\n}()`,
context, context,
)) as TaskResultData['result']; )) as TaskResultData['result'];