Skip to content

Commit

Permalink
fix: properly fail on patch failure
Browse files Browse the repository at this point in the history
  • Loading branch information
Anton Drukh committed Jul 10, 2019
1 parent 45d5f13 commit 170126b
Showing 1 changed file with 30 additions and 28 deletions.
58 changes: 30 additions & 28 deletions src/lib/protect/apply-patch.js
Expand Up @@ -20,37 +20,39 @@ function applyPatch(patchFileName, vuln, live, patchUrl) {
const relative = path.relative(process.cwd(), cwd);
debug('DRY RUN: relative: %s', relative);

let pkg = {};
const packageJsonPath = path.resolve(relative, 'package.json');
try {
const packageJson = fs.readFileSync(packageJsonPath);
pkg = JSON.parse(packageJson);
debug('package at patch target location: %s@%s', pkg.name, pkg.version);
} catch (err) {
debug('Failed loading package.json at %s. Skipping patch!', packageJsonPath, err);
return resolve();
}

const versionOfPackageToPatch = pkg.version;
const patchableVersionsRange = vuln.patches.version;
if (semver.satisfies(versionOfPackageToPatch, patchableVersionsRange)) {
debug('Patch version range %s matches package version %s',
patchableVersionsRange, versionOfPackageToPatch);
} else {
debug('Patch version range %s does not match package version %s. Skipping patch!',
patchableVersionsRange, versionOfPackageToPatch);
return resolve();
}

const patchContent = fs.readFileSync(path.resolve(relative, patchFileName), 'utf8');

jsDiff(patchContent, relative, live).then(() => {
debug('patch succeed');
resolve();
}).catch((error) => {
let pkg = {};
const packageJsonPath = path.resolve(relative, 'package.json');
try {
const packageJson = fs.readFileSync(packageJsonPath);
pkg = JSON.parse(packageJson);
debug('package at patch target location: %s@%s', pkg.name, pkg.version);
} catch (err) {
debug('Failed loading package.json at %s. Skipping patch!', packageJsonPath, err);
return resolve();
}

const versionOfPackageToPatch = pkg.version;
const patchableVersionsRange = vuln.patches.version;
if (semver.satisfies(versionOfPackageToPatch, patchableVersionsRange)) {
debug('Patch version range %s matches package version %s',
patchableVersionsRange, versionOfPackageToPatch);
} else {
debug('Patch version range %s does not match package version %s. Skipping patch!',
patchableVersionsRange, versionOfPackageToPatch);
return resolve();
}

const patchContent = fs.readFileSync(path.resolve(relative, patchFileName), 'utf8');

jsDiff(patchContent, relative, live).then(() => {
debug('patch succeed');
resolve();
});
} catch (error) {
debug('patch command failed', relative, error);
patchError(error, relative, vuln, patchUrl).catch(reject);
});
};
}));
}

Expand Down

0 comments on commit 170126b

Please sign in to comment.