Files
orca/docs/audits/runtime-rpc-consumed-queue/queue-source.cjs
T

53 lines
2.0 KiB
JavaScript

const assert = require('node:assert/strict')
const { createHash } = require('node:crypto')
const { readFileSync } = require('node:fs')
const path = require('node:path')
const Module = require('node:module')
const esbuild = require('esbuild')
const { applyPatch, parsePatch, reversePatch } = require('diff')
const versions = require('./source-versions.json')
assert.equal(process.env.ORCA_BACKGROUND_LAUNCH, '1')
assert.equal(typeof global.gc, 'function')
const root = path.resolve(__dirname, '../../..')
const readText = (file) => readFileSync(file, 'utf8').replace(/\r\n/g, '\n')
const sha = (value) => createHash('sha256').update(value).digest('hex')
const fixedSource = readText(path.join(root, versions.sourcePath))
assert.equal(sha(fixedSource), versions.fixedSha256, 'Product source changed; review proof hashes')
const patches = parsePatch(readText(path.join(__dirname, 'fix.patch')))
assert.equal(patches.length, 1)
const baselineSource = applyPatch(fixedSource, reversePatch(patches[0]))
assert.notEqual(baselineSource, false)
assert.equal(sha(baselineSource), versions.baselineSha256, 'Baseline reconstruction changed')
function load(candidate) {
const build = esbuild.buildSync({
stdin: {
contents: candidate ? fixedSource : baselineSource,
resolveDir: path.join(root, 'src/shared'),
sourcefile: versions.sourcePath,
loader: 'ts'
},
platform: 'node',
format: 'cjs',
bundle: true,
packages: 'external',
write: false
})
const filename = path.join(__dirname, 'bundled-queue.cjs')
const loaded = new Module(filename, module)
loaded.filename = filename
loaded.paths = Module._nodeModulePaths(__dirname)
loaded._compile(build.outputFiles[0].text, filename)
return loaded.exports.RuntimeRpcCallQueuePool
}
async function collect() {
for (let round = 0; round < 3; round += 1) {
await new Promise((resolve) => setImmediate(resolve))
global.gc()
}
}
module.exports = { load, collect, sha, versions, baselineSource }