Files
codeql/javascript/ql/test/ApiGraphs/promisify/index.js
Max Schaefer ecab17a626 JavaScript: Teach API graphs to handle promisify.
Following a suggestion by Asger, we track use nodes through calls to `promisify`. When we see a call to a promisified function, we introduce a new synthetic API-graph node representing the callback argument synthesised by the promisification, and track the result of the call to an `await` (or other promise resolution), which is then considered to be a use of the first parameter of the synthetic callback (the zeroth parameter being an error code, which we do not model yet).
2021-01-11 13:53:46 +00:00

29 lines
1.3 KiB
JavaScript

var bluebird = require("bluebird");
var readFile = require("fs").readFile;
var readFileAsync = bluebird.promisify(readFile);
readFile(
"tst.txt", // def (parameter 0 (member readFile (member exports (module fs))))
"utf8", // def (parameter 1 (member readFile (member exports (module fs))))
function (
err, // use (parameter 0 (parameter 2 (member readFile (member exports (module fs)))))
contents // use (parameter 1 (parameter 2 (member readFile (member exports (module fs)))))
) { });
readFileAsync(
"tst.txt" // def (parameter 0 (member readFile (member exports (module fs))))
).then(
function (buf) { } // use (parameter 1 (parameter 1 (member readFile (member exports (module fs)))))
).catch(
function (err) { } // not yet modelled: (parameter 0 (parameter 1 (member readFile (member exports (module fs)))))
);
try {
let p = readFileAsync(
"tst.txt", // def (parameter 0 (member readFile (member exports (module fs))))
"utf8" // def (parameter 1 (member readFile (member exports (module fs))))
);
let data = await p; // use (parameter 1 (parameter 2 (member readFile (member exports (module fs)))))
} catch (e) { } // not yet modelled: (parameter 0 (parameter 2 (member readFile (member exports (module fs)))))