diff --git a/lib/analyze-action.js b/lib/analyze-action.js index 77af178a8..737d2c694 100644 --- a/lib/analyze-action.js +++ b/lib/analyze-action.js @@ -29,43 +29,44 @@ async function sendStatusReport(startedAt, queriesStats, uploadStats, error) { }; await util.sendStatusReport(statusReport); } -async function createdDBForScannedLanguages(databaseFolder, config) { +async function createdDBForScannedLanguages(config) { const codeql = codeql_1.getCodeQL(config.codeQLCmd); for (const language of config.languages) { if (languages_1.isScannedLanguage(language)) { core.startGroup('Extracting ' + language); - await codeql.extractScannedLanguage(path.join(databaseFolder, language), language); + await codeql.extractScannedLanguage(util.getCodeQLDatabasePath(config.tempDir, language), language); core.endGroup(); } } } -async function finalizeDatabaseCreation(databaseFolder, config) { - await createdDBForScannedLanguages(databaseFolder, config); +async function finalizeDatabaseCreation(config) { + await createdDBForScannedLanguages(config); const codeql = codeql_1.getCodeQL(config.codeQLCmd); for (const language of config.languages) { core.startGroup('Finalizing ' + language); - await codeql.finalizeDatabase(path.join(databaseFolder, language)); + await codeql.finalizeDatabase(util.getCodeQLDatabasePath(config.tempDir, language)); core.endGroup(); } } // Runs queries and creates sarif files in the given folder -async function runQueries(databaseFolder, sarifFolder, config) { +async function runQueries(sarifFolder, config) { const codeql = codeql_1.getCodeQL(config.codeQLCmd); - for (let language of fs.readdirSync(databaseFolder)) { + for (let language of config.languages) { core.startGroup('Analyzing ' + language); const queries = config.queries[language] || []; if (queries.length === 0) { throw new Error('Unable to analyse ' + language + ' as no queries were selected for this language'); } try { + const databasePath = util.getCodeQLDatabasePath(config.tempDir, language); // Pass the queries to codeql using a file instead of using the command // line to avoid command line length restrictions, particularly on windows. - const querySuite = path.join(databaseFolder, language + '-queries.qls'); + const querySuite = databasePath + '-queries.qls'; const querySuiteContents = queries.map(q => '- query: ' + q).join('\n'); fs.writeFileSync(querySuite, querySuiteContents); core.debug('Query suite file for ' + language + '...\n' + querySuiteContents); const sarifFile = path.join(sarifFolder, language + '.sarif'); - await codeql.databaseAnalyze(path.join(databaseFolder, language), sarifFile, querySuite); + await codeql.databaseAnalyze(databasePath, sarifFile, querySuite); core.debug('SARIF results for database ' + language + ' created at "' + sarifFile + '"'); core.endGroup(); } @@ -90,13 +91,12 @@ async function run() { const config = await configUtils.getConfig(util.getRequiredEnvParam('RUNNER_TEMP')); core.exportVariable(sharedEnv.ODASA_TRACER_CONFIGURATION, ''); delete process.env[sharedEnv.ODASA_TRACER_CONFIGURATION]; - const databaseFolder = util.getCodeQLDatabasesDir(config.tempDir); const sarifFolder = core.getInput('output'); fs.mkdirSync(sarifFolder, { recursive: true }); core.info('Finalizing database creation'); - await finalizeDatabaseCreation(databaseFolder, config); + await finalizeDatabaseCreation(config); core.info('Analyzing database'); - queriesStats = await runQueries(databaseFolder, sarifFolder, config); + queriesStats = await runQueries(sarifFolder, config); if ('true' === core.getInput('upload')) { uploadStats = await upload_lib.upload(sarifFolder, repository_1.parseRepositoryNwo(util.getRequiredEnvParam('GITHUB_REPOSITORY')), await util.getCommitOid(), util.getRef(), await util.getAnalysisKey(), util.getRequiredEnvParam('GITHUB_WORKFLOW'), util.getWorkflowRunID(), core.getInput('checkout_path'), core.getInput('matrix'), core.getInput('token'), util.getRequiredEnvParam('GITHUB_API_URL'), 'actions', logging_1.getActionsLogger()); } diff --git a/lib/analyze-action.js.map b/lib/analyze-action.js.map index 5bca8ee09..758b217b3 100644 --- a/lib/analyze-action.js.map +++ b/lib/analyze-action.js.map @@ -1 +1 @@ -{"version":3,"file":"analyze-action.js","sourceRoot":"","sources":["../src/analyze-action.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"analyze-action.js","sourceRoot":"","sources":["../src/analyze-action.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/codeql.js b/lib/codeql.js index 3c7cf10c8..a7650110f 100644 --- a/lib/codeql.js +++ b/lib/codeql.js @@ -231,14 +231,12 @@ function getCodeQLForCmd(cmd) { '--format=json' ]); }, - getTracerEnv: async function (databasePath, compilerSpec) { + getTracerEnv: async function (databasePath) { let envFile = path.resolve(databasePath, 'working', 'env.tmp'); - const compilerSpecArg = compilerSpec ? ["--compiler-spec=" + compilerSpec] : []; await exec.exec(cmd, [ 'database', 'trace-command', databasePath, - ...compilerSpecArg, ...getExtraOptionsFromEnv(['database', 'trace-command']), process.execPath, path.resolve(__dirname, 'tracer-env.js'), diff --git a/lib/codeql.js.map b/lib/codeql.js.map index 9856e6957..6780b4f2a 100644 --- a/lib/codeql.js.map +++ b/lib/codeql.js.map @@ -1 +1 @@ -{"version":3,"file":"codeql.js","sourceRoot":"","sources":["../src/codeql.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"codeql.js","sourceRoot":"","sources":["../src/codeql.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/init-action.js b/lib/init-action.js index 310f62e90..8cc880d4a 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -14,111 +14,8 @@ const path = __importStar(require("path")); const analysisPaths = __importStar(require("./analysis-paths")); const codeql_1 = require("./codeql"); const configUtils = __importStar(require("./config-utils")); -const languages_1 = require("./languages"); +const tracer_config_1 = require("./tracer-config"); const util = __importStar(require("./util")); -const CRITICAL_TRACER_VARS = new Set(['SEMMLE_PRELOAD_libtrace', - , - 'SEMMLE_RUNNER', - , - 'SEMMLE_COPY_EXECUTABLES_ROOT', - , - 'SEMMLE_DEPTRACE_SOCKET', - , - 'SEMMLE_JAVA_TOOL_OPTIONS' -]); -async function tracerConfig(codeql, database, compilerSpec) { - const env = await codeql.getTracerEnv(database, compilerSpec); - const config = env['ODASA_TRACER_CONFIGURATION']; - const info = { spec: config, env: {} }; - // Extract critical tracer variables from the environment - for (let entry of Object.entries(env)) { - const key = entry[0]; - const value = entry[1]; - // skip ODASA_TRACER_CONFIGURATION as it is handled separately - if (key === 'ODASA_TRACER_CONFIGURATION') { - continue; - } - // skip undefined values - if (typeof value === 'undefined') { - continue; - } - // Keep variables that do not exist in current environment. In addition always keep - // critical and CODEQL_ variables - if (typeof process.env[key] === 'undefined' || CRITICAL_TRACER_VARS.has(key) || key.startsWith('CODEQL_')) { - info.env[key] = value; - } - } - return info; -} -function concatTracerConfigs(tracerConfigs, config) { - // A tracer config is a map containing additional environment variables and a tracer 'spec' file. - // A tracer 'spec' file has the following format [log_file, number_of_blocks, blocks_text] - // Merge the environments - const env = {}; - let copyExecutables = false; - let envSize = 0; - for (const v of tracerConfigs) { - for (let e of Object.entries(v.env)) { - const name = e[0]; - const value = e[1]; - // skip SEMMLE_COPY_EXECUTABLES_ROOT as it is handled separately - if (name === 'SEMMLE_COPY_EXECUTABLES_ROOT') { - copyExecutables = true; - } - else if (name in env) { - if (env[name] !== value) { - throw Error('Incompatible values in environment parameter ' + - name + ': ' + env[name] + ' and ' + value); - } - } - else { - env[name] = value; - envSize += 1; - } - } - } - // Concatenate spec files into a new spec file - let languages = Object.keys(tracerConfigs); - const cppIndex = languages.indexOf('cpp'); - // Make sure cpp is the last language, if it's present since it must be concatenated last - if (cppIndex !== -1) { - let lastLang = languages[languages.length - 1]; - languages[languages.length - 1] = languages[cppIndex]; - languages[cppIndex] = lastLang; - } - let totalLines = []; - let totalCount = 0; - for (let lang of languages) { - const lines = fs.readFileSync(tracerConfigs[lang].spec, 'utf8').split(/\r?\n/); - const count = parseInt(lines[1], 10); - totalCount += count; - totalLines.push(...lines.slice(2)); - } - const newLogFilePath = path.resolve(config.tempDir, 'compound-build-tracer.log'); - const spec = path.resolve(config.tempDir, 'compound-spec'); - const compoundTempFolder = path.resolve(config.tempDir, 'compound-temp'); - const newSpecContent = [newLogFilePath, totalCount.toString(10), ...totalLines]; - if (copyExecutables) { - env['SEMMLE_COPY_EXECUTABLES_ROOT'] = compoundTempFolder; - envSize += 1; - } - fs.writeFileSync(spec, newSpecContent.join('\n')); - // Prepare the content of the compound environment file - let buffer = Buffer.alloc(4); - buffer.writeInt32LE(envSize, 0); - for (let e of Object.entries(env)) { - const key = e[0]; - const value = e[1]; - const lineBuffer = new Buffer(key + '=' + value + '\0', 'utf8'); - const sizeBuffer = Buffer.alloc(4); - sizeBuffer.writeInt32LE(lineBuffer.length, 0); - buffer = Buffer.concat([buffer, sizeBuffer, lineBuffer]); - } - // Write the compound environment - const envPath = spec + '.environment'; - fs.writeFileSync(envPath, buffer); - return { env, spec }; -} async function sendSuccessStatusReport(startedAt, config) { const statusReportBase = await util.createStatusReportBase('init', 'success', startedAt); const languages = config.languages.join(','); @@ -173,41 +70,22 @@ async function run() { // Setup CODEQL_RAM flag (todo improve this https://github.com/github/dsp-code-scanning/issues/935) const codeqlRam = process.env['CODEQL_RAM'] || '6500'; core.exportVariable('CODEQL_RAM', codeqlRam); - const databaseFolder = util.getCodeQLDatabasesDir(config.tempDir); - fs.mkdirSync(databaseFolder, { recursive: true }); - let tracedLanguageConfigs = []; + fs.mkdirSync(util.getCodeQLDatabasesDir(config.tempDir), { recursive: true }); // TODO: replace this code once CodeQL supports multi-language tracing for (let language of config.languages) { - const languageDatabase = path.join(databaseFolder, language); // Init language database - await codeql.databaseInit(languageDatabase, language, sourceRoot); - // TODO: add better detection of 'traced languages' instead of using a hard coded list - if (languages_1.isTracedLanguage(language)) { - const config = await tracerConfig(codeql, languageDatabase); - tracedLanguageConfigs.push(config); - } + await codeql.databaseInit(util.getCodeQLDatabasePath(config.tempDir, language), language, sourceRoot); } - if (tracedLanguageConfigs.length > 0) { - const mainTracerConfig = concatTracerConfigs(tracedLanguageConfigs, config); - if (mainTracerConfig.spec) { - for (let entry of Object.entries(mainTracerConfig.env)) { - core.exportVariable(entry[0], entry[1]); - } - core.exportVariable('ODASA_TRACER_CONFIGURATION', mainTracerConfig.spec); - const codeQLDir = path.dirname(codeql.getPath()); - if (process.platform === 'darwin') { - core.exportVariable('DYLD_INSERT_LIBRARIES', path.join(codeQLDir, 'tools', 'osx64', 'libtrace.dylib')); - } - else if (process.platform === 'win32') { - await exec.exec('powershell', [ - path.resolve(__dirname, '..', 'src', 'inject-tracer.ps1'), - path.resolve(codeQLDir, 'tools', 'win64', 'tracer.exe'), - ], { env: { 'ODASA_TRACER_CONFIGURATION': mainTracerConfig.spec } }); - } - else { - core.exportVariable('LD_PRELOAD', path.join(codeQLDir, 'tools', 'linux64', '${LIB}trace.so')); - } + const tracerConfig = await tracer_config_1.getCombinedTracerConfig(config, codeql); + if (tracerConfig !== undefined) { + if (process.platform === 'win32') { + await exec.exec('powershell', [ + path.resolve(__dirname, '..', 'src', 'inject-tracer.ps1'), + path.resolve(path.dirname(codeql.getPath()), 'tools', 'win64', 'tracer.exe'), + ], { env: { 'ODASA_TRACER_CONFIGURATION': tracerConfig.spec } }); } + // NB: in CLI mode these will be output to a file rather than exported with core.exportVariable + Object.entries(tracerConfig.env).forEach(([key, value]) => core.exportVariable(key, value)); } } catch (error) { diff --git a/lib/init-action.js.map b/lib/init-action.js.map index 5db41fed1..8e186a9fb 100644 --- a/lib/init-action.js.map +++ b/lib/init-action.js.map @@ -1 +1 @@ -{"version":3,"file":"init-action.js","sourceRoot":"","sources":["../src/init-action.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"init-action.js","sourceRoot":"","sources":["../src/init-action.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/tracer-config.js b/lib/tracer-config.js new file mode 100644 index 000000000..22c439a78 --- /dev/null +++ b/lib/tracer-config.js @@ -0,0 +1,143 @@ +"use strict"; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs = __importStar(require("fs")); +const path = __importStar(require("path")); +const languages_1 = require("./languages"); +const util = __importStar(require("./util")); +const CRITICAL_TRACER_VARS = new Set(['SEMMLE_PRELOAD_libtrace', + , + 'SEMMLE_RUNNER', + , + 'SEMMLE_COPY_EXECUTABLES_ROOT', + , + 'SEMMLE_DEPTRACE_SOCKET', + , + 'SEMMLE_JAVA_TOOL_OPTIONS' +]); +async function getTracerConfigForLanguage(codeql, config, language) { + const env = await codeql.getTracerEnv(util.getCodeQLDatabasePath(config.tempDir, language)); + const spec = env['ODASA_TRACER_CONFIGURATION']; + const info = { spec, env: {} }; + // Extract critical tracer variables from the environment + for (let entry of Object.entries(env)) { + const key = entry[0]; + const value = entry[1]; + // skip ODASA_TRACER_CONFIGURATION as it is handled separately + if (key === 'ODASA_TRACER_CONFIGURATION') { + continue; + } + // skip undefined values + if (typeof value === 'undefined') { + continue; + } + // Keep variables that do not exist in current environment. In addition always keep + // critical and CODEQL_ variables + if (typeof process.env[key] === 'undefined' || CRITICAL_TRACER_VARS.has(key) || key.startsWith('CODEQL_')) { + info.env[key] = value; + } + } + return info; +} +exports.getTracerConfigForLanguage = getTracerConfigForLanguage; +function concatTracerConfigs(tracerConfigs, config) { + // A tracer config is a map containing additional environment variables and a tracer 'spec' file. + // A tracer 'spec' file has the following format [log_file, number_of_blocks, blocks_text] + // Merge the environments + const env = {}; + let copyExecutables = false; + let envSize = 0; + for (const v of Object.values(tracerConfigs)) { + for (let e of Object.entries(v.env)) { + const name = e[0]; + const value = e[1]; + // skip SEMMLE_COPY_EXECUTABLES_ROOT as it is handled separately + if (name === 'SEMMLE_COPY_EXECUTABLES_ROOT') { + copyExecutables = true; + } + else if (name in env) { + if (env[name] !== value) { + throw Error('Incompatible values in environment parameter ' + + name + ': ' + env[name] + ' and ' + value); + } + } + else { + env[name] = value; + envSize += 1; + } + } + } + // Concatenate spec files into a new spec file + let languages = Object.keys(tracerConfigs); + const cppIndex = languages.indexOf('cpp'); + // Make sure cpp is the last language, if it's present since it must be concatenated last + if (cppIndex !== -1) { + let lastLang = languages[languages.length - 1]; + languages[languages.length - 1] = languages[cppIndex]; + languages[cppIndex] = lastLang; + } + let totalLines = []; + let totalCount = 0; + for (let lang of languages) { + const lines = fs.readFileSync(tracerConfigs[lang].spec, 'utf8').split(/\r?\n/); + const count = parseInt(lines[1], 10); + totalCount += count; + totalLines.push(...lines.slice(2)); + } + const newLogFilePath = path.resolve(config.tempDir, 'compound-build-tracer.log'); + const spec = path.resolve(config.tempDir, 'compound-spec'); + const compoundTempFolder = path.resolve(config.tempDir, 'compound-temp'); + const newSpecContent = [newLogFilePath, totalCount.toString(10), ...totalLines]; + if (copyExecutables) { + env['SEMMLE_COPY_EXECUTABLES_ROOT'] = compoundTempFolder; + envSize += 1; + } + fs.writeFileSync(spec, newSpecContent.join('\n')); + // Prepare the content of the compound environment file + let buffer = Buffer.alloc(4); + buffer.writeInt32LE(envSize, 0); + for (let e of Object.entries(env)) { + const key = e[0]; + const value = e[1]; + const lineBuffer = new Buffer(key + '=' + value + '\0', 'utf8'); + const sizeBuffer = Buffer.alloc(4); + sizeBuffer.writeInt32LE(lineBuffer.length, 0); + buffer = Buffer.concat([buffer, sizeBuffer, lineBuffer]); + } + // Write the compound environment + const envPath = spec + '.environment'; + fs.writeFileSync(envPath, buffer); + return { env, spec }; +} +exports.concatTracerConfigs = concatTracerConfigs; +async function getCombinedTracerConfig(config, codeql) { + // Abort if there are no traced languages as there's nothing to do + const tracedLanguages = config.languages.filter(languages_1.isTracedLanguage); + if (tracedLanguages.length === 0) { + return undefined; + } + // Get all the tracer configs and combine them together + const tracedLanguageConfigs = {}; + for (const language of tracedLanguages) { + tracedLanguageConfigs[language] = await getTracerConfigForLanguage(codeql, config, language); + } + const mainTracerConfig = concatTracerConfigs(tracedLanguageConfigs, config); + // Add a couple more variables + mainTracerConfig.env['ODASA_TRACER_CONFIGURATION'] = mainTracerConfig.spec; + const codeQLDir = path.dirname(codeql.getPath()); + if (process.platform === 'darwin') { + mainTracerConfig.env['DYLD_INSERT_LIBRARIES'] = path.join(codeQLDir, 'tools', 'osx64', 'libtrace.dylib'); + } + else if (process.platform !== 'win32') { + mainTracerConfig.env['LD_PRELOAD'] = path.join(codeQLDir, 'tools', 'linux64', '${LIB}trace.so'); + } + return mainTracerConfig; +} +exports.getCombinedTracerConfig = getCombinedTracerConfig; +//# sourceMappingURL=tracer-config.js.map \ No newline at end of file diff --git a/lib/tracer-config.js.map b/lib/tracer-config.js.map new file mode 100644 index 000000000..077fa3ff4 --- /dev/null +++ b/lib/tracer-config.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tracer-config.js","sourceRoot":"","sources":["../src/tracer-config.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/tracer-config.test.js b/lib/tracer-config.test.js new file mode 100644 index 000000000..e3176bba7 --- /dev/null +++ b/lib/tracer-config.test.js @@ -0,0 +1,272 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const ava_1 = __importDefault(require("ava")); +const fs = __importStar(require("fs")); +const path = __importStar(require("path")); +const codeql_1 = require("./codeql"); +const languages_1 = require("./languages"); +const testing_utils_1 = require("./testing-utils"); +const tracer_config_1 = require("./tracer-config"); +const util = __importStar(require("./util")); +testing_utils_1.setupTests(ava_1.default); +function getTestConfig(tmpDir) { + return { + languages: [languages_1.Language.java], + queries: {}, + pathsIgnore: [], + paths: [], + originalUserInput: {}, + tempDir: tmpDir, + toolCacheDir: tmpDir, + codeQLCmd: '', + }; +} +// A very minimal setup +ava_1.default('getTracerConfigForLanguage - minimal setup', async (t) => { + await util.withTmpDir(async (tmpDir) => { + const config = getTestConfig(tmpDir); + const codeQL = codeql_1.setCodeQL({ + getTracerEnv: async function () { + return { + 'ODASA_TRACER_CONFIGURATION': 'abc', + 'foo': 'bar' + }; + }, + }); + const result = await tracer_config_1.getTracerConfigForLanguage(codeQL, config, languages_1.Language.javascript); + t.deepEqual(result, { spec: 'abc', env: { 'foo': 'bar' } }); + }); +}); +// Existing vars should not be overwritten, unless they are critical or prefixed with CODEQL_ +ava_1.default('getTracerConfigForLanguage - existing / critical vars', async (t) => { + await util.withTmpDir(async (tmpDir) => { + const config = getTestConfig(tmpDir); + // Set up some variables in the environment + process.env['foo'] = 'abc'; + process.env['SEMMLE_PRELOAD_libtrace'] = 'abc'; + process.env['SEMMLE_RUNNER'] = 'abc'; + process.env['SEMMLE_COPY_EXECUTABLES_ROOT'] = 'abc'; + process.env['SEMMLE_DEPTRACE_SOCKET'] = 'abc'; + process.env['SEMMLE_JAVA_TOOL_OPTIONS'] = 'abc'; + process.env['SEMMLE_DEPTRACE_SOCKET'] = 'abc'; + process.env['CODEQL_VAR'] = 'abc'; + // Now CodeQL returns all these variables, and one more, with different values + const codeQL = codeql_1.setCodeQL({ + getTracerEnv: async function () { + return { + 'ODASA_TRACER_CONFIGURATION': 'abc', + 'foo': 'bar', + 'baz': 'qux', + 'SEMMLE_PRELOAD_libtrace': 'SEMMLE_PRELOAD_libtrace', + 'SEMMLE_RUNNER': 'SEMMLE_RUNNER', + 'SEMMLE_COPY_EXECUTABLES_ROOT': 'SEMMLE_COPY_EXECUTABLES_ROOT', + 'SEMMLE_DEPTRACE_SOCKET': 'SEMMLE_DEPTRACE_SOCKET', + 'SEMMLE_JAVA_TOOL_OPTIONS': 'SEMMLE_JAVA_TOOL_OPTIONS', + 'CODEQL_VAR': 'CODEQL_VAR', + }; + }, + }); + const result = await tracer_config_1.getTracerConfigForLanguage(codeQL, config, languages_1.Language.javascript); + t.deepEqual(result, { + spec: 'abc', + env: { + // Should contain all variables except 'foo', because that already existed in the + // environment with a different value, and is not deemed a "critical" variable. + 'baz': 'qux', + 'SEMMLE_PRELOAD_libtrace': 'SEMMLE_PRELOAD_libtrace', + 'SEMMLE_RUNNER': 'SEMMLE_RUNNER', + 'SEMMLE_COPY_EXECUTABLES_ROOT': 'SEMMLE_COPY_EXECUTABLES_ROOT', + 'SEMMLE_DEPTRACE_SOCKET': 'SEMMLE_DEPTRACE_SOCKET', + 'SEMMLE_JAVA_TOOL_OPTIONS': 'SEMMLE_JAVA_TOOL_OPTIONS', + 'CODEQL_VAR': 'CODEQL_VAR', + } + }); + }); +}); +ava_1.default('concatTracerConfigs - minimal configs correctly combined', async (t) => { + await util.withTmpDir(async (tmpDir) => { + const config = getTestConfig(tmpDir); + const spec1 = path.join(tmpDir, 'spec1'); + fs.writeFileSync(spec1, 'foo.log\n2\nabc\ndef'); + const tc1 = { + spec: spec1, + env: { + 'a': 'a', + 'b': 'b', + } + }; + const spec2 = path.join(tmpDir, 'spec2'); + fs.writeFileSync(spec2, 'foo.log\n1\nghi'); + const tc2 = { + spec: spec2, + env: { + 'c': 'c', + } + }; + const result = tracer_config_1.concatTracerConfigs({ 'javascript': tc1, 'python': tc2 }, config); + t.deepEqual(result, { + spec: path.join(tmpDir, 'compound-spec'), + env: { + 'a': 'a', + 'b': 'b', + 'c': 'c', + } + }); + t.true(fs.existsSync(result.spec)); + t.deepEqual(fs.readFileSync(result.spec, 'utf8'), path.join(tmpDir, 'compound-build-tracer.log') + '\n3\nabc\ndef\nghi'); + }); +}); +ava_1.default('concatTracerConfigs - conflicting env vars', async (t) => { + await util.withTmpDir(async (tmpDir) => { + const config = getTestConfig(tmpDir); + const spec = path.join(tmpDir, 'spec'); + fs.writeFileSync(spec, 'foo.log\n0'); + // Ok if env vars have the same name and the same value + t.deepEqual(tracer_config_1.concatTracerConfigs({ + 'javascript': { spec: spec, env: { 'a': 'a', 'b': 'b' } }, + 'python': { spec: spec, env: { 'b': 'b', 'c': 'c' } }, + }, config).env, { + 'a': 'a', + 'b': 'b', + 'c': 'c', + }); + // Throws if env vars have same name but different values + const e = t.throws(() => tracer_config_1.concatTracerConfigs({ + 'javascript': { spec: spec, env: { 'a': 'a', 'b': 'b' } }, + 'python': { spec: spec, env: { 'b': 'c' } }, + }, config)); + t.deepEqual(e.message, 'Incompatible values in environment parameter b: b and c'); + }); +}); +ava_1.default('concatTracerConfigs - cpp spec lines come last if present', async (t) => { + await util.withTmpDir(async (tmpDir) => { + const config = getTestConfig(tmpDir); + const spec1 = path.join(tmpDir, 'spec1'); + fs.writeFileSync(spec1, 'foo.log\n2\nabc\ndef'); + const tc1 = { + spec: spec1, + env: { + 'a': 'a', + 'b': 'b', + } + }; + const spec2 = path.join(tmpDir, 'spec2'); + fs.writeFileSync(spec2, 'foo.log\n1\nghi'); + const tc2 = { + spec: spec2, + env: { + 'c': 'c', + } + }; + const result = tracer_config_1.concatTracerConfigs({ 'cpp': tc1, 'python': tc2 }, config); + t.deepEqual(result, { + spec: path.join(tmpDir, 'compound-spec'), + env: { + 'a': 'a', + 'b': 'b', + 'c': 'c', + } + }); + t.true(fs.existsSync(result.spec)); + t.deepEqual(fs.readFileSync(result.spec, 'utf8'), path.join(tmpDir, 'compound-build-tracer.log') + '\n3\nghi\nabc\ndef'); + }); +}); +ava_1.default('concatTracerConfigs - SEMMLE_COPY_EXECUTABLES_ROOT is updated to point to compound spec', async (t) => { + await util.withTmpDir(async (tmpDir) => { + const config = getTestConfig(tmpDir); + const spec = path.join(tmpDir, 'spec'); + fs.writeFileSync(spec, 'foo.log\n0'); + const result = tracer_config_1.concatTracerConfigs({ + 'javascript': { spec: spec, env: { 'a': 'a', 'b': 'b' } }, + 'python': { spec: spec, env: { 'SEMMLE_COPY_EXECUTABLES_ROOT': 'foo' } }, + }, config); + t.deepEqual(result.env, { + 'a': 'a', + 'b': 'b', + 'SEMMLE_COPY_EXECUTABLES_ROOT': path.join(tmpDir, 'compound-temp') + }); + }); +}); +ava_1.default('concatTracerConfigs - compound environment file is created correctly', async (t) => { + await util.withTmpDir(async (tmpDir) => { + const config = getTestConfig(tmpDir); + const spec1 = path.join(tmpDir, 'spec1'); + fs.writeFileSync(spec1, 'foo.log\n2\nabc\ndef'); + const tc1 = { + spec: spec1, + env: { + 'a': 'a', + } + }; + const spec2 = path.join(tmpDir, 'spec2'); + fs.writeFileSync(spec2, 'foo.log\n1\nghi'); + const tc2 = { + spec: spec2, + env: { + 'foo': 'bar_baz', + } + }; + const result = tracer_config_1.concatTracerConfigs({ 'javascript': tc1, 'python': tc2 }, config); + const envPath = result.spec + '.environment'; + t.true(fs.existsSync(envPath)); + const buffer = fs.readFileSync(envPath); + // Contents is binary data + t.deepEqual(buffer.length, 28); + t.deepEqual(buffer.readInt32LE(0), 2); // number of env vars + t.deepEqual(buffer.readInt32LE(4), 4); // length of env var definition + t.deepEqual(buffer.toString('utf8', 8, 12), 'a=a\0'); // [key]=[value]\0 + t.deepEqual(buffer.readInt32LE(12), 12); // length of env var definition + t.deepEqual(buffer.toString('utf8', 16, 28), 'foo=bar_baz\0'); // [key]=[value]\0 + }); +}); +ava_1.default('getCombinedTracerConfig - return undefined when no languages are traced languages', async (t) => { + await util.withTmpDir(async (tmpDir) => { + const config = getTestConfig(tmpDir); + // No traced languages + config.languages = [languages_1.Language.javascript, languages_1.Language.python]; + const codeQL = codeql_1.setCodeQL({ + getTracerEnv: async function () { + return { + 'ODASA_TRACER_CONFIGURATION': 'abc', + 'foo': 'bar' + }; + }, + }); + t.deepEqual(await tracer_config_1.getCombinedTracerConfig(config, codeQL), undefined); + }); +}); +ava_1.default('getCombinedTracerConfig - valid spec file', async (t) => { + await util.withTmpDir(async (tmpDir) => { + const config = getTestConfig(tmpDir); + const spec = path.join(tmpDir, 'spec'); + fs.writeFileSync(spec, 'foo.log\n2\nabc\ndef'); + const codeQL = codeql_1.setCodeQL({ + getTracerEnv: async function () { + return { + 'ODASA_TRACER_CONFIGURATION': spec, + 'foo': 'bar', + }; + }, + }); + const result = await tracer_config_1.getCombinedTracerConfig(config, codeQL); + t.deepEqual(result, { + spec: path.join(tmpDir, 'compound-spec'), + env: { + 'foo': 'bar', + 'ODASA_TRACER_CONFIGURATION': result.spec, + 'LD_PRELOAD': path.join(path.dirname(codeQL.getPath()), 'tools', 'linux64', '${LIB}trace.so'), + } + }); + }); +}); +//# sourceMappingURL=tracer-config.test.js.map \ No newline at end of file diff --git a/lib/tracer-config.test.js.map b/lib/tracer-config.test.js.map new file mode 100644 index 000000000..8c61e8f02 --- /dev/null +++ b/lib/tracer-config.test.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tracer-config.test.js","sourceRoot":"","sources":["../src/tracer-config.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/util.js b/lib/util.js index a0e2d76bd..83496a567 100644 --- a/lib/util.js +++ b/lib/util.js @@ -378,4 +378,11 @@ function getCodeQLDatabasesDir(tempDir) { return path.resolve(tempDir, 'codeql_databases'); } exports.getCodeQLDatabasesDir = getCodeQLDatabasesDir; +/** + * Get the path where the CodeQL database for the given language lives. + */ +function getCodeQLDatabasePath(tempDir, language) { + return path.resolve(getCodeQLDatabasesDir(tempDir), language); +} +exports.getCodeQLDatabasePath = getCodeQLDatabasePath; //# sourceMappingURL=util.js.map \ No newline at end of file diff --git a/lib/util.js.map b/lib/util.js.map index 3f1dd0676..62dad2447 100644 --- a/lib/util.js.map +++ b/lib/util.js.map @@ -1 +1 @@ -{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/analyze-action.ts b/src/analyze-action.ts index 3b3798855..a77388e7f 100644 --- a/src/analyze-action.ts +++ b/src/analyze-action.ts @@ -58,36 +58,35 @@ async function sendStatusReport( await util.sendStatusReport(statusReport); } -async function createdDBForScannedLanguages(databaseFolder: string, config: configUtils.Config) { +async function createdDBForScannedLanguages(config: configUtils.Config) { const codeql = getCodeQL(config.codeQLCmd); for (const language of config.languages) { if (isScannedLanguage(language)) { core.startGroup('Extracting ' + language); - await codeql.extractScannedLanguage(path.join(databaseFolder, language), language); + await codeql.extractScannedLanguage(util.getCodeQLDatabasePath(config.tempDir, language), language); core.endGroup(); } } } -async function finalizeDatabaseCreation(databaseFolder: string, config: configUtils.Config) { - await createdDBForScannedLanguages(databaseFolder, config); +async function finalizeDatabaseCreation(config: configUtils.Config) { + await createdDBForScannedLanguages(config); const codeql = getCodeQL(config.codeQLCmd); for (const language of config.languages) { core.startGroup('Finalizing ' + language); - await codeql.finalizeDatabase(path.join(databaseFolder, language)); + await codeql.finalizeDatabase(util.getCodeQLDatabasePath(config.tempDir, language)); core.endGroup(); } } // Runs queries and creates sarif files in the given folder async function runQueries( - databaseFolder: string, sarifFolder: string, config: configUtils.Config): Promise { const codeql = getCodeQL(config.codeQLCmd); - for (let language of fs.readdirSync(databaseFolder)) { + for (let language of config.languages) { core.startGroup('Analyzing ' + language); const queries = config.queries[language] || []; @@ -96,16 +95,17 @@ async function runQueries( } try { + const databasePath = util.getCodeQLDatabasePath(config.tempDir, language); // Pass the queries to codeql using a file instead of using the command // line to avoid command line length restrictions, particularly on windows. - const querySuite = path.join(databaseFolder, language + '-queries.qls'); + const querySuite = databasePath + '-queries.qls'; const querySuiteContents = queries.map(q => '- query: ' + q).join('\n'); fs.writeFileSync(querySuite, querySuiteContents); core.debug('Query suite file for ' + language + '...\n' + querySuiteContents); const sarifFile = path.join(sarifFolder, language + '.sarif'); - await codeql.databaseAnalyze(path.join(databaseFolder, language), sarifFile, querySuite); + await codeql.databaseAnalyze(databasePath, sarifFile, querySuite); core.debug('SARIF results for database ' + language + ' created at "' + sarifFile + '"'); core.endGroup(); @@ -135,16 +135,14 @@ async function run() { core.exportVariable(sharedEnv.ODASA_TRACER_CONFIGURATION, ''); delete process.env[sharedEnv.ODASA_TRACER_CONFIGURATION]; - const databaseFolder = util.getCodeQLDatabasesDir(config.tempDir); - const sarifFolder = core.getInput('output'); fs.mkdirSync(sarifFolder, { recursive: true }); core.info('Finalizing database creation'); - await finalizeDatabaseCreation(databaseFolder, config); + await finalizeDatabaseCreation(config); core.info('Analyzing database'); - queriesStats = await runQueries(databaseFolder, sarifFolder, config); + queriesStats = await runQueries(sarifFolder, config); if ('true' === core.getInput('upload')) { uploadStats = await upload_lib.upload( diff --git a/src/codeql.ts b/src/codeql.ts index ddf93aed8..ce537ab9a 100644 --- a/src/codeql.ts +++ b/src/codeql.ts @@ -49,7 +49,7 @@ export interface CodeQL { * Run 'codeql database trace-command' on 'tracer-env.js' and parse * the result to get environment variables set by CodeQL. */ - getTracerEnv(databasePath: string, compilerSpec: string | undefined): Promise<{ [key: string]: string }>; + getTracerEnv(databasePath: string): Promise<{ [key: string]: string }>; /** * Run 'codeql database init'. */ @@ -316,14 +316,12 @@ function getCodeQLForCmd(cmd: string): CodeQL { '--format=json' ]); }, - getTracerEnv: async function(databasePath: string, compilerSpec: string | undefined) { + getTracerEnv: async function(databasePath: string) { let envFile = path.resolve(databasePath, 'working', 'env.tmp'); - const compilerSpecArg = compilerSpec ? ["--compiler-spec=" + compilerSpec] : []; await exec.exec(cmd, [ 'database', 'trace-command', databasePath, - ...compilerSpecArg, ...getExtraOptionsFromEnv(['database', 'trace-command']), process.execPath, path.resolve(__dirname, 'tracer-env.js'), diff --git a/src/init-action.ts b/src/init-action.ts index 9e25439da..794dc1477 100644 --- a/src/init-action.ts +++ b/src/init-action.ts @@ -6,129 +6,9 @@ import * as path from 'path'; import * as analysisPaths from './analysis-paths'; import { CodeQL, setupCodeQL } from './codeql'; import * as configUtils from './config-utils'; -import { isTracedLanguage } from './languages'; +import { getCombinedTracerConfig } from './tracer-config'; import * as util from './util'; -type TracerConfig = { - spec: string; - env: { [key: string]: string }; -}; - -const CRITICAL_TRACER_VARS = new Set( - ['SEMMLE_PRELOAD_libtrace', - , 'SEMMLE_RUNNER', - , 'SEMMLE_COPY_EXECUTABLES_ROOT', - , 'SEMMLE_DEPTRACE_SOCKET', - , 'SEMMLE_JAVA_TOOL_OPTIONS' - ]); - -async function tracerConfig( - codeql: CodeQL, - database: string, - compilerSpec?: string): Promise { - - const env = await codeql.getTracerEnv(database, compilerSpec); - - const config = env['ODASA_TRACER_CONFIGURATION']; - const info: TracerConfig = { spec: config, env: {} }; - - // Extract critical tracer variables from the environment - for (let entry of Object.entries(env)) { - const key = entry[0]; - const value = entry[1]; - // skip ODASA_TRACER_CONFIGURATION as it is handled separately - if (key === 'ODASA_TRACER_CONFIGURATION') { - continue; - } - // skip undefined values - if (typeof value === 'undefined') { - continue; - } - // Keep variables that do not exist in current environment. In addition always keep - // critical and CODEQL_ variables - if (typeof process.env[key] === 'undefined' || CRITICAL_TRACER_VARS.has(key) || key.startsWith('CODEQL_')) { - info.env[key] = value; - } - } - return info; -} - -function concatTracerConfigs(tracerConfigs: TracerConfig[], config: configUtils.Config): TracerConfig { - // A tracer config is a map containing additional environment variables and a tracer 'spec' file. - // A tracer 'spec' file has the following format [log_file, number_of_blocks, blocks_text] - - // Merge the environments - const env: { [key: string]: string; } = {}; - let copyExecutables = false; - let envSize = 0; - for (const v of tracerConfigs) { - for (let e of Object.entries(v.env)) { - const name = e[0]; - const value = e[1]; - // skip SEMMLE_COPY_EXECUTABLES_ROOT as it is handled separately - if (name === 'SEMMLE_COPY_EXECUTABLES_ROOT') { - copyExecutables = true; - } else if (name in env) { - if (env[name] !== value) { - throw Error('Incompatible values in environment parameter ' + - name + ': ' + env[name] + ' and ' + value); - } - } else { - env[name] = value; - envSize += 1; - } - } - } - - // Concatenate spec files into a new spec file - let languages = Object.keys(tracerConfigs); - const cppIndex = languages.indexOf('cpp'); - // Make sure cpp is the last language, if it's present since it must be concatenated last - if (cppIndex !== -1) { - let lastLang = languages[languages.length - 1]; - languages[languages.length - 1] = languages[cppIndex]; - languages[cppIndex] = lastLang; - } - - let totalLines: string[] = []; - let totalCount = 0; - for (let lang of languages) { - const lines = fs.readFileSync(tracerConfigs[lang].spec, 'utf8').split(/\r?\n/); - const count = parseInt(lines[1], 10); - totalCount += count; - totalLines.push(...lines.slice(2)); - } - - const newLogFilePath = path.resolve(config.tempDir, 'compound-build-tracer.log'); - const spec = path.resolve(config.tempDir, 'compound-spec'); - const compoundTempFolder = path.resolve(config.tempDir, 'compound-temp'); - const newSpecContent = [newLogFilePath, totalCount.toString(10), ...totalLines]; - - if (copyExecutables) { - env['SEMMLE_COPY_EXECUTABLES_ROOT'] = compoundTempFolder; - envSize += 1; - } - - fs.writeFileSync(spec, newSpecContent.join('\n')); - - // Prepare the content of the compound environment file - let buffer = Buffer.alloc(4); - buffer.writeInt32LE(envSize, 0); - for (let e of Object.entries(env)) { - const key = e[0]; - const value = e[1]; - const lineBuffer = new Buffer(key + '=' + value + '\0', 'utf8'); - const sizeBuffer = Buffer.alloc(4); - sizeBuffer.writeInt32LE(lineBuffer.length, 0); - buffer = Buffer.concat([buffer, sizeBuffer, lineBuffer]); - } - // Write the compound environment - const envPath = spec + '.environment'; - fs.writeFileSync(envPath, buffer); - - return { env, spec }; -} - interface InitSuccessStatusReport extends util.StatusReportBase { // Comma-separated list of languages that analysis was run for // This may be from the workflow file or may be calculated from repository contents @@ -215,48 +95,30 @@ async function run() { const codeqlRam = process.env['CODEQL_RAM'] || '6500'; core.exportVariable('CODEQL_RAM', codeqlRam); - const databaseFolder = util.getCodeQLDatabasesDir(config.tempDir); - fs.mkdirSync(databaseFolder, { recursive: true }); + fs.mkdirSync(util.getCodeQLDatabasesDir(config.tempDir), { recursive: true }); - let tracedLanguageConfigs: TracerConfig[] = []; // TODO: replace this code once CodeQL supports multi-language tracing for (let language of config.languages) { - const languageDatabase = path.join(databaseFolder, language); - // Init language database - await codeql.databaseInit(languageDatabase, language, sourceRoot); - // TODO: add better detection of 'traced languages' instead of using a hard coded list - if (isTracedLanguage(language)) { - const config: TracerConfig = await tracerConfig(codeql, languageDatabase); - tracedLanguageConfigs.push(config); - } + await codeql.databaseInit(util.getCodeQLDatabasePath(config.tempDir, language), language, sourceRoot); } - if (tracedLanguageConfigs.length > 0) { - const mainTracerConfig = concatTracerConfigs(tracedLanguageConfigs, config); - if (mainTracerConfig.spec) { - for (let entry of Object.entries(mainTracerConfig.env)) { - core.exportVariable(entry[0], entry[1]); - } - core.exportVariable('ODASA_TRACER_CONFIGURATION', mainTracerConfig.spec); - const codeQLDir = path.dirname(codeql.getPath()); - if (process.platform === 'darwin') { - core.exportVariable( - 'DYLD_INSERT_LIBRARIES', - path.join(codeQLDir, 'tools', 'osx64', 'libtrace.dylib')); - } else if (process.platform === 'win32') { - await exec.exec( - 'powershell', - [ - path.resolve(__dirname, '..', 'src', 'inject-tracer.ps1'), - path.resolve(codeQLDir, 'tools', 'win64', 'tracer.exe'), - ], - { env: { 'ODASA_TRACER_CONFIGURATION': mainTracerConfig.spec } }); - } else { - core.exportVariable('LD_PRELOAD', path.join(codeQLDir, 'tools', 'linux64', '${LIB}trace.so')); - } + const tracerConfig = await getCombinedTracerConfig(config, codeql); + if (tracerConfig !== undefined) { + if (process.platform === 'win32') { + await exec.exec( + 'powershell', + [ + path.resolve(__dirname, '..', 'src', 'inject-tracer.ps1'), + path.resolve(path.dirname(codeql.getPath()), 'tools', 'win64', 'tracer.exe'), + ], + { env: { 'ODASA_TRACER_CONFIGURATION': tracerConfig.spec } }); } + + // NB: in CLI mode these will be output to a file rather than exported with core.exportVariable + Object.entries(tracerConfig.env).forEach(([key, value]) => core.exportVariable(key, value)); } + } catch (error) { core.setFailed(error.message); console.log(error); diff --git a/src/tracer-config.test.ts b/src/tracer-config.test.ts new file mode 100644 index 000000000..50e045121 --- /dev/null +++ b/src/tracer-config.test.ts @@ -0,0 +1,311 @@ +import test from 'ava'; +import * as fs from 'fs'; +import * as path from 'path'; + +import { setCodeQL } from './codeql'; +import * as configUtils from './config-utils'; +import { Language } from './languages'; +import { setupTests } from './testing-utils'; +import { concatTracerConfigs, getCombinedTracerConfig, getTracerConfigForLanguage } from './tracer-config'; +import * as util from './util'; + +setupTests(test); + +function getTestConfig(tmpDir: string): configUtils.Config { + return { + languages: [Language.java], + queries: {}, + pathsIgnore: [], + paths: [], + originalUserInput: {}, + tempDir: tmpDir, + toolCacheDir: tmpDir, + codeQLCmd: '', + }; +} + +// A very minimal setup +test('getTracerConfigForLanguage - minimal setup', async t => { + await util.withTmpDir(async tmpDir => { + const config = getTestConfig(tmpDir); + + const codeQL = setCodeQL({ + getTracerEnv: async function() { + return { + 'ODASA_TRACER_CONFIGURATION': 'abc', + 'foo': 'bar' + }; + }, + }); + + const result = await getTracerConfigForLanguage(codeQL, config, Language.javascript); + t.deepEqual(result, { spec: 'abc', env: {'foo': 'bar'} }); + }); +}); + +// Existing vars should not be overwritten, unless they are critical or prefixed with CODEQL_ +test('getTracerConfigForLanguage - existing / critical vars', async t => { + await util.withTmpDir(async tmpDir => { + const config = getTestConfig(tmpDir); + + // Set up some variables in the environment + process.env['foo'] = 'abc'; + process.env['SEMMLE_PRELOAD_libtrace'] = 'abc'; + process.env['SEMMLE_RUNNER'] = 'abc'; + process.env['SEMMLE_COPY_EXECUTABLES_ROOT'] = 'abc'; + process.env['SEMMLE_DEPTRACE_SOCKET'] = 'abc'; + process.env['SEMMLE_JAVA_TOOL_OPTIONS'] = 'abc'; + process.env['SEMMLE_DEPTRACE_SOCKET'] = 'abc'; + process.env['CODEQL_VAR'] = 'abc'; + + // Now CodeQL returns all these variables, and one more, with different values + const codeQL = setCodeQL({ + getTracerEnv: async function() { + return { + 'ODASA_TRACER_CONFIGURATION': 'abc', + 'foo': 'bar', + 'baz': 'qux', + 'SEMMLE_PRELOAD_libtrace': 'SEMMLE_PRELOAD_libtrace', + 'SEMMLE_RUNNER': 'SEMMLE_RUNNER', + 'SEMMLE_COPY_EXECUTABLES_ROOT': 'SEMMLE_COPY_EXECUTABLES_ROOT', + 'SEMMLE_DEPTRACE_SOCKET': 'SEMMLE_DEPTRACE_SOCKET', + 'SEMMLE_JAVA_TOOL_OPTIONS': 'SEMMLE_JAVA_TOOL_OPTIONS', + 'CODEQL_VAR': 'CODEQL_VAR', + }; + }, + }); + + const result = await getTracerConfigForLanguage(codeQL, config, Language.javascript); + t.deepEqual(result, { + spec: 'abc', + env: { + // Should contain all variables except 'foo', because that already existed in the + // environment with a different value, and is not deemed a "critical" variable. + 'baz': 'qux', + 'SEMMLE_PRELOAD_libtrace': 'SEMMLE_PRELOAD_libtrace', + 'SEMMLE_RUNNER': 'SEMMLE_RUNNER', + 'SEMMLE_COPY_EXECUTABLES_ROOT': 'SEMMLE_COPY_EXECUTABLES_ROOT', + 'SEMMLE_DEPTRACE_SOCKET': 'SEMMLE_DEPTRACE_SOCKET', + 'SEMMLE_JAVA_TOOL_OPTIONS': 'SEMMLE_JAVA_TOOL_OPTIONS', + 'CODEQL_VAR': 'CODEQL_VAR', + } + }); + }); +}); + +test('concatTracerConfigs - minimal configs correctly combined', async t => { + await util.withTmpDir(async tmpDir => { + const config = getTestConfig(tmpDir); + + const spec1 = path.join(tmpDir, 'spec1'); + fs.writeFileSync(spec1, 'foo.log\n2\nabc\ndef'); + const tc1 = { + spec: spec1, + env: { + 'a': 'a', + 'b': 'b', + } + }; + + const spec2 = path.join(tmpDir, 'spec2'); + fs.writeFileSync(spec2, 'foo.log\n1\nghi'); + const tc2 = { + spec: spec2, + env: { + 'c': 'c', + } + }; + + const result = concatTracerConfigs({ 'javascript': tc1, 'python': tc2 }, config); + t.deepEqual(result, { + spec: path.join(tmpDir, 'compound-spec'), + env: { + 'a': 'a', + 'b': 'b', + 'c': 'c', + } + }); + t.true(fs.existsSync(result.spec)); + t.deepEqual( + fs.readFileSync(result.spec, 'utf8'), + path.join(tmpDir, 'compound-build-tracer.log') + '\n3\nabc\ndef\nghi'); + }); +}); + +test('concatTracerConfigs - conflicting env vars', async t => { + await util.withTmpDir(async tmpDir => { + const config = getTestConfig(tmpDir); + + const spec = path.join(tmpDir, 'spec'); + fs.writeFileSync(spec, 'foo.log\n0'); + + // Ok if env vars have the same name and the same value + t.deepEqual( + concatTracerConfigs( + { + 'javascript': {spec: spec, env: {'a': 'a', 'b': 'b'}}, + 'python': {spec: spec, env: {'b': 'b', 'c': 'c'}}, + }, + config).env, + { + 'a': 'a', + 'b': 'b', + 'c': 'c', + }); + + // Throws if env vars have same name but different values + const e = t.throws(() => + concatTracerConfigs( + { + 'javascript': {spec: spec, env: {'a': 'a', 'b': 'b'}}, + 'python': {spec: spec, env: {'b': 'c'}}, + }, + config)); + t.deepEqual(e.message, 'Incompatible values in environment parameter b: b and c'); + }); +}); + +test('concatTracerConfigs - cpp spec lines come last if present', async t => { + await util.withTmpDir(async tmpDir => { + const config = getTestConfig(tmpDir); + + const spec1 = path.join(tmpDir, 'spec1'); + fs.writeFileSync(spec1, 'foo.log\n2\nabc\ndef'); + const tc1 = { + spec: spec1, + env: { + 'a': 'a', + 'b': 'b', + } + }; + + const spec2 = path.join(tmpDir, 'spec2'); + fs.writeFileSync(spec2, 'foo.log\n1\nghi'); + const tc2 = { + spec: spec2, + env: { + 'c': 'c', + } + }; + + const result = concatTracerConfigs({ 'cpp': tc1, 'python': tc2 }, config); + t.deepEqual(result, { + spec: path.join(tmpDir, 'compound-spec'), + env: { + 'a': 'a', + 'b': 'b', + 'c': 'c', + } + }); + t.true(fs.existsSync(result.spec)); + t.deepEqual( + fs.readFileSync(result.spec, 'utf8'), + path.join(tmpDir, 'compound-build-tracer.log') + '\n3\nghi\nabc\ndef'); + }); +}); + +test('concatTracerConfigs - SEMMLE_COPY_EXECUTABLES_ROOT is updated to point to compound spec', async t => { + await util.withTmpDir(async tmpDir => { + const config = getTestConfig(tmpDir); + + const spec = path.join(tmpDir, 'spec'); + fs.writeFileSync(spec, 'foo.log\n0'); + + const result = concatTracerConfigs( + { + 'javascript': {spec: spec, env: {'a': 'a', 'b': 'b'}}, + 'python': {spec: spec, env: {'SEMMLE_COPY_EXECUTABLES_ROOT': 'foo'}}, + }, + config); + + t.deepEqual(result.env, { + 'a': 'a', + 'b': 'b', + 'SEMMLE_COPY_EXECUTABLES_ROOT': path.join(tmpDir, 'compound-temp') + }); + }); +}); + +test('concatTracerConfigs - compound environment file is created correctly', async t => { + await util.withTmpDir(async tmpDir => { + const config = getTestConfig(tmpDir); + + const spec1 = path.join(tmpDir, 'spec1'); + fs.writeFileSync(spec1, 'foo.log\n2\nabc\ndef'); + const tc1 = { + spec: spec1, + env: { + 'a': 'a', + } + }; + + const spec2 = path.join(tmpDir, 'spec2'); + fs.writeFileSync(spec2, 'foo.log\n1\nghi'); + const tc2 = { + spec: spec2, + env: { + 'foo': 'bar_baz', + } + }; + + const result = concatTracerConfigs({ 'javascript': tc1, 'python': tc2 }, config); + const envPath = result.spec + '.environment'; + t.true(fs.existsSync(envPath)); + + const buffer: Buffer = fs.readFileSync(envPath); + // Contents is binary data + t.deepEqual(buffer.length, 28); + t.deepEqual(buffer.readInt32LE(0), 2); // number of env vars + t.deepEqual(buffer.readInt32LE(4), 4); // length of env var definition + t.deepEqual(buffer.toString('utf8', 8, 12), 'a=a\0'); // [key]=[value]\0 + t.deepEqual(buffer.readInt32LE(12), 12); // length of env var definition + t.deepEqual(buffer.toString('utf8', 16, 28), 'foo=bar_baz\0'); // [key]=[value]\0 + }); +}); + +test('getCombinedTracerConfig - return undefined when no languages are traced languages', async t => { + await util.withTmpDir(async tmpDir => { + const config = getTestConfig(tmpDir); + // No traced languages + config.languages = [Language.javascript, Language.python]; + + const codeQL = setCodeQL({ + getTracerEnv: async function() { + return { + 'ODASA_TRACER_CONFIGURATION': 'abc', + 'foo': 'bar' + }; + }, + }); + + t.deepEqual(await getCombinedTracerConfig(config, codeQL), undefined); + }); +}); + +test('getCombinedTracerConfig - valid spec file', async t => { + await util.withTmpDir(async tmpDir => { + const config = getTestConfig(tmpDir); + + const spec = path.join(tmpDir, 'spec'); + fs.writeFileSync(spec, 'foo.log\n2\nabc\ndef'); + + const codeQL = setCodeQL({ + getTracerEnv: async function() { + return { + 'ODASA_TRACER_CONFIGURATION': spec, + 'foo': 'bar', + }; + }, + }); + + const result = await getCombinedTracerConfig(config, codeQL); + t.deepEqual(result, { + spec: path.join(tmpDir, 'compound-spec'), + env: { + 'foo': 'bar', + 'ODASA_TRACER_CONFIGURATION': result!.spec, + 'LD_PRELOAD': path.join(path.dirname(codeQL.getPath()), 'tools', 'linux64', '${LIB}trace.so'), + } + }); + }); +}); diff --git a/src/tracer-config.ts b/src/tracer-config.ts new file mode 100644 index 000000000..1bc64c400 --- /dev/null +++ b/src/tracer-config.ts @@ -0,0 +1,159 @@ +import * as fs from 'fs'; +import * as path from 'path'; + +import { CodeQL } from './codeql'; +import * as configUtils from './config-utils'; +import { isTracedLanguage, Language } from './languages'; +import * as util from './util'; + +export type TracerConfig = { + spec: string; + env: { [key: string]: string }; +}; + +const CRITICAL_TRACER_VARS = new Set( + ['SEMMLE_PRELOAD_libtrace', + , 'SEMMLE_RUNNER', + , 'SEMMLE_COPY_EXECUTABLES_ROOT', + , 'SEMMLE_DEPTRACE_SOCKET', + , 'SEMMLE_JAVA_TOOL_OPTIONS' + ]); + +export async function getTracerConfigForLanguage( + codeql: CodeQL, + config: configUtils.Config, + language: Language): Promise { + + const env = await codeql.getTracerEnv(util.getCodeQLDatabasePath(config.tempDir, language)); + + const spec = env['ODASA_TRACER_CONFIGURATION']; + const info: TracerConfig = { spec, env: {} }; + + // Extract critical tracer variables from the environment + for (let entry of Object.entries(env)) { + const key = entry[0]; + const value = entry[1]; + // skip ODASA_TRACER_CONFIGURATION as it is handled separately + if (key === 'ODASA_TRACER_CONFIGURATION') { + continue; + } + // skip undefined values + if (typeof value === 'undefined') { + continue; + } + // Keep variables that do not exist in current environment. In addition always keep + // critical and CODEQL_ variables + if (typeof process.env[key] === 'undefined' || CRITICAL_TRACER_VARS.has(key) || key.startsWith('CODEQL_')) { + info.env[key] = value; + } + } + return info; +} + +export function concatTracerConfigs( + tracerConfigs: { [lang: string]: TracerConfig }, + config: configUtils.Config): TracerConfig { + + // A tracer config is a map containing additional environment variables and a tracer 'spec' file. + // A tracer 'spec' file has the following format [log_file, number_of_blocks, blocks_text] + + // Merge the environments + const env: { [key: string]: string; } = {}; + let copyExecutables = false; + let envSize = 0; + for (const v of Object.values(tracerConfigs)) { + for (let e of Object.entries(v.env)) { + const name = e[0]; + const value = e[1]; + // skip SEMMLE_COPY_EXECUTABLES_ROOT as it is handled separately + if (name === 'SEMMLE_COPY_EXECUTABLES_ROOT') { + copyExecutables = true; + } else if (name in env) { + if (env[name] !== value) { + throw Error('Incompatible values in environment parameter ' + + name + ': ' + env[name] + ' and ' + value); + } + } else { + env[name] = value; + envSize += 1; + } + } + } + + // Concatenate spec files into a new spec file + let languages = Object.keys(tracerConfigs); + const cppIndex = languages.indexOf('cpp'); + // Make sure cpp is the last language, if it's present since it must be concatenated last + if (cppIndex !== -1) { + let lastLang = languages[languages.length - 1]; + languages[languages.length - 1] = languages[cppIndex]; + languages[cppIndex] = lastLang; + } + + let totalLines: string[] = []; + let totalCount = 0; + for (let lang of languages) { + const lines = fs.readFileSync(tracerConfigs[lang].spec, 'utf8').split(/\r?\n/); + const count = parseInt(lines[1], 10); + totalCount += count; + totalLines.push(...lines.slice(2)); + } + + const newLogFilePath = path.resolve(config.tempDir, 'compound-build-tracer.log'); + const spec = path.resolve(config.tempDir, 'compound-spec'); + const compoundTempFolder = path.resolve(config.tempDir, 'compound-temp'); + const newSpecContent = [newLogFilePath, totalCount.toString(10), ...totalLines]; + + if (copyExecutables) { + env['SEMMLE_COPY_EXECUTABLES_ROOT'] = compoundTempFolder; + envSize += 1; + } + + fs.writeFileSync(spec, newSpecContent.join('\n')); + + // Prepare the content of the compound environment file + let buffer = Buffer.alloc(4); + buffer.writeInt32LE(envSize, 0); + for (let e of Object.entries(env)) { + const key = e[0]; + const value = e[1]; + const lineBuffer = new Buffer(key + '=' + value + '\0', 'utf8'); + const sizeBuffer = Buffer.alloc(4); + sizeBuffer.writeInt32LE(lineBuffer.length, 0); + buffer = Buffer.concat([buffer, sizeBuffer, lineBuffer]); + } + // Write the compound environment + const envPath = spec + '.environment'; + fs.writeFileSync(envPath, buffer); + + return { env, spec }; +} + +export async function getCombinedTracerConfig( + config: configUtils.Config, + codeql: CodeQL): Promise { + + // Abort if there are no traced languages as there's nothing to do + const tracedLanguages = config.languages.filter(isTracedLanguage); + if (tracedLanguages.length === 0) { + return undefined; + } + + // Get all the tracer configs and combine them together + const tracedLanguageConfigs: { [lang: string]: TracerConfig } = {}; + for (const language of tracedLanguages) { + tracedLanguageConfigs[language] = await getTracerConfigForLanguage(codeql, config, language); + } + const mainTracerConfig = concatTracerConfigs(tracedLanguageConfigs, config); + + // Add a couple more variables + mainTracerConfig.env['ODASA_TRACER_CONFIGURATION'] = mainTracerConfig.spec; + const codeQLDir = path.dirname(codeql.getPath()); + if (process.platform === 'darwin') { + mainTracerConfig.env['DYLD_INSERT_LIBRARIES'] = path.join(codeQLDir, 'tools', 'osx64', 'libtrace.dylib'); + } else if (process.platform !== 'win32') { + mainTracerConfig.env['LD_PRELOAD'] = path.join(codeQLDir, 'tools', 'linux64', '${LIB}trace.so'); + } + + return mainTracerConfig; +} diff --git a/src/util.ts b/src/util.ts index c4bf9c93e..6db99ba08 100644 --- a/src/util.ts +++ b/src/util.ts @@ -5,6 +5,7 @@ import * as os from 'os'; import * as path from 'path'; import * as api from './api-client'; +import { Language } from './languages'; import * as sharedEnv from './shared-environment'; /** @@ -433,3 +434,10 @@ export function getThreadsFlag(): string { export function getCodeQLDatabasesDir(tempDir: string) { return path.resolve(tempDir, 'codeql_databases'); } + +/** + * Get the path where the CodeQL database for the given language lives. + */ +export function getCodeQLDatabasePath(tempDir: string, language: Language) { + return path.resolve(getCodeQLDatabasesDir(tempDir), language); +}