Project.prototype.getFile = function (filePath,treeish) {
    if (treeish !== "_") {
        return gitTools.getFile(this.path, filePath, treeish);
    } else {
        let fullPath = fspath.join(this.path,filePath);
        if (/^\.\./.test(fspath.relative(this.path,fullPath))) {
            throw new Error("Invalid file name")
        }
        return fs.readFile(fspath.join(this.path,filePath),"utf8");
    }
};
The software uses external input to construct a pathname that is intended to identify a file or directory that is located underneath a restricted parent directory, but the software does not properly neutralize special elements within the pathname that can cause the pathname to resolve to a location that is outside of the restricted directory.