Skip to content

Commit dfbb054

Browse files
authored
fix(worker/repository): add normalized match for pip alertPackageRules (#28214)
1 parent 6e389d7 commit dfbb054

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

lib/workers/repository/init/vulnerability.spec.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,41 @@ describe('workers/repository/init/vulnerability', () => {
368368
expect(res.packageRules).toHaveLength(1);
369369
});
370370

371+
it('returns pip alerts with normalized name', async () => {
372+
// TODO #22198
373+
delete config.vulnerabilityAlerts!.enabled;
374+
platform.getVulnerabilityAlerts.mockResolvedValue([
375+
{
376+
dismissReason: null,
377+
vulnerableManifestFilename: 'requirements.txt',
378+
vulnerableManifestPath: 'requirements.txt',
379+
vulnerableRequirements: '= 1.6.7',
380+
securityAdvisory: {
381+
description: 'Description',
382+
identifiers: [
383+
{ type: 'GHSA', value: 'GHSA-m956-frf4-m2wr' },
384+
{ type: 'CVE', value: 'CVE-2016-2137' },
385+
],
386+
references: [
387+
{ url: 'https://nvd.nist.gov/vuln/detail/CVE-2016-9587' },
388+
],
389+
severity: 'MODERATE',
390+
},
391+
securityVulnerability: {
392+
package: { name: 'Pillow', ecosystem: 'PIP' },
393+
firstPatchedVersion: { identifier: '2.1.4' },
394+
vulnerableVersionRange: '< 2.1.4',
395+
},
396+
},
397+
]);
398+
const res = await detectVulnerabilityAlerts(config);
399+
expect(res.packageRules).toHaveLength(1);
400+
expect(res.packageRules![0].matchPackageNames).toEqual([
401+
'Pillow',
402+
'pillow',
403+
]);
404+
});
405+
371406
it('returns remediations', async () => {
372407
config.transitiveRemediation = true;
373408
// TODO #22198

lib/workers/repository/init/vulnerability.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { NpmDatasource } from '../../../modules/datasource/npm';
99
import { NugetDatasource } from '../../../modules/datasource/nuget';
1010
import { PackagistDatasource } from '../../../modules/datasource/packagist';
1111
import { PypiDatasource } from '../../../modules/datasource/pypi';
12+
import { normalizeDepName } from '../../../modules/datasource/pypi/common';
1213
import { RubyGemsDatasource } from '../../../modules/datasource/rubygems';
1314
import { platform } from '../../../modules/platform';
1415
import * as allVersioning from '../../../modules/versioning';
@@ -218,6 +219,12 @@ export async function detectVulnerabilityAlerts(
218219
matchCurrentVersion,
219220
matchFileNames,
220221
};
222+
if (
223+
datasource === PypiDatasource.id &&
224+
normalizeDepName(depName) !== depName
225+
) {
226+
matchRule.matchPackageNames?.push(normalizeDepName(depName));
227+
}
221228
const supportedRemediationFileTypes = ['package-lock.json'];
222229
if (
223230
config.transitiveRemediation &&

0 commit comments

Comments
 (0)