Skip to content

Commit e6753a5

Browse files
authored
Merge pull request #102 from gardenlinux/workaround-release-notes
Fixes gardenlinux/glvd#160
2 parents 1ddc233 + 2aea65a commit e6753a5

File tree

5 files changed

+160
-33
lines changed

5 files changed

+160
-33
lines changed

src/main/java/io/gardenlinux/glvd/releasenotes/ReleaseNoteGenerator.java

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public ReleaseNote generate() {
3939
var cvesNewVersionIgnoreResolved = cvesNewVersion.stream().filter(sourcePackageCve -> !resolvedInNew.contains(sourcePackageCve.getCveId())).toList();
4040
var cvesNewVersionCveIds = cvesNewVersionIgnoreResolved.stream().map(SourcePackageCve::getCveId).collect(Collectors.joining());
4141
var diff = cvesOldVersion.stream().filter(sourcePackageCve -> !cvesNewVersionCveIds.contains(sourcePackageCve.getCveId())).toList();
42+
4243
HashMap<String, List<String>> sourcePackageNameToCveListMapping = new HashMap<>();
4344
for (SourcePackageCve sourcePackageCve : diff) {
4445
var cveList = sourcePackageNameToCveListMapping.getOrDefault(sourcePackageCve.getSourcePackageName(), new ArrayList<>());
@@ -47,12 +48,24 @@ public ReleaseNote generate() {
4748
}
4849
List<ReleaseNotesPackage> releaseNotesPackages = new ArrayList<>();
4950
sourcePackageNameToCveListMapping.forEach((sourcePackage, cves) ->
50-
releaseNotesPackages.add(
51-
new ReleaseNotesPackage(sourcePackage,
52-
getVersionByPackageName(sourcePackagesInOldVersion, sourcePackage),
53-
getVersionByPackageName(sourcePackagesInNewVersion, sourcePackage),
54-
cves)
55-
)
51+
{
52+
String oldVersion = getVersionByPackageName(sourcePackagesInOldVersion, sourcePackage);
53+
String newVersion = getVersionByPackageName(sourcePackagesInNewVersion, sourcePackage);
54+
if (oldVersion.isEmpty() || newVersion.isEmpty()) {
55+
return;
56+
}
57+
// https://github.com/gardenlinux/glvd/issues/160
58+
// If the old and new version are the same, this is probably a false positive
59+
if (oldVersion.equals(newVersion)) {
60+
return;
61+
}
62+
releaseNotesPackages.add(
63+
new ReleaseNotesPackage(sourcePackage,
64+
oldVersion,
65+
newVersion,
66+
cves)
67+
);
68+
}
5669
);
5770

5871
return new ReleaseNote(gardenLinuxVersion.printVersion(), releaseNotesPackages);

src/test/java/io/gardenlinux/glvd/GlvdControllerTest.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ public void shouldGetCveDetailsWithContextsForKernelCveIsResolved() {
231231
.body("details.kernelLtsVersion[0]", equalTo("6.6"))
232232
.body("details.kernelLtsVersion[1]", equalTo("6.12"))
233233
// This CVE is not fixed in any kernel, so all are vulnerable
234-
.body("details.isVulnerable", is(List.of(true, true, true, true, true, true, true, true)))
234+
.body("details.isVulnerable", is(List.of(true, true, true, true, true, true, true)))
235235
// Is explicitly marked as "resolved"
236236
.body("contexts.resolved", hasItems(true));
237237
}
@@ -275,6 +275,16 @@ public void shouldGenerateEmptyPatchReleaseNotesForDistWithNoSourcePackages() {
275275
.body("packageList", empty());
276276
}
277277

278+
@Test
279+
public void reproduceIssue153() {
280+
// Reproducer for https://github.com/gardenlinux/glvd/issues/153
281+
given(this.spec).accept("application/json")
282+
.when().port(this.port).get("/v1/patchReleaseNotes/1443.20")
283+
.then().statusCode(200)
284+
.body("version", equalTo("1443.20"))
285+
.body("packageList", empty());
286+
}
287+
278288
@Test
279289
public void shouldReportExpectedTriagesForGardenlinuxVersion() {
280290
given(this.spec).accept("application/json")

src/test/java/io/gardenlinux/glvd/ReleaseNoteGeneratorTest.java

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,4 +204,72 @@ public void generateReleaseNotesWithCveContextOfNonVulnerableCve() {
204204
assertEquals(cveOld3.getCveId(), actual.getPackageList().get(2).getFixedCves().getFirst());
205205
}
206206

207+
SourcePackageCve rubyCveOld = new SourcePackageCve(
208+
"CVE-2023-28755",
209+
"ruby3.1",
210+
"3.1.2-8.4gl0",
211+
gardenLinuxVersion.previousPatchVersion(),
212+
true,
213+
"",
214+
"",
215+
"",
216+
7.5f,
217+
"",
218+
7.5f,
219+
7.5f,
220+
7.5f,
221+
7.5f,
222+
"",
223+
"",
224+
"",
225+
""
226+
);
227+
228+
SourcePackageCve rubyCveNew = new SourcePackageCve(
229+
"CVE-2023-28755",
230+
"ruby3.1",
231+
"3.1.2-8.4gl0",
232+
gardenLinuxVersion.printVersion(),
233+
true,
234+
"",
235+
"",
236+
"",
237+
7.5f,
238+
"",
239+
7.5f,
240+
7.5f,
241+
7.5f,
242+
7.5f,
243+
"",
244+
"",
245+
"",
246+
""
247+
);
248+
249+
@Test
250+
public void generateReleaseNotesWithCveListAffectingTheSamePackageVersion() {
251+
final List<SourcePackageCve> cvesOldVersion = List.of(rubyCveOld);
252+
final List<SourcePackageCve> cvesNewVersion = List.of(rubyCveNew);
253+
final List<String> resolvedInNew = List.of();
254+
final List<DebSrc> sourcePackagesInOldVersion = List.of(new DebSrc(DIST_ID_OLD, "2023-10-01", "ruby3.1", "3.1.2-8.4gl0"), new DebSrc(DIST_ID_OLD, "2023-10-01", "rubygems", "3.4.20-1"));
255+
final List<DebSrc> sourcePackagesInNewVersion = List.of(new DebSrc(DIST_ID_NEW, "2023-10-01", "ruby3.1", "3.1.2-8.4gl0"), new DebSrc(DIST_ID_NEW, "2023-10-01", "rubygems", "3.4.20-1"));
256+
257+
var actual = new ReleaseNoteGenerator(gardenLinuxVersion, cvesOldVersion, cvesNewVersion, resolvedInNew, sourcePackagesInOldVersion, sourcePackagesInNewVersion).generate();
258+
259+
assertEquals(0, actual.getPackageList().size());
260+
}
261+
262+
@Test
263+
public void generateReleaseNotesWithCveListAffectingTheSamePackageVersionWhenNewCveIsTriaged() {
264+
final List<SourcePackageCve> cvesOldVersion = List.of(rubyCveOld);
265+
final List<SourcePackageCve> cvesNewVersion = List.of(rubyCveNew);
266+
final List<String> resolvedInNew = List.of(rubyCveNew.getCveId());
267+
final List<DebSrc> sourcePackagesInOldVersion = List.of(new DebSrc(DIST_ID_OLD, "2023-10-01", "ruby3.1", "3.1.2-8.4gl0"), new DebSrc(DIST_ID_OLD, "2023-10-01", "rubygems", "3.4.20-1"));
268+
final List<DebSrc> sourcePackagesInNewVersion = List.of(new DebSrc(DIST_ID_NEW, "2023-10-01", "ruby3.1", "3.1.2-8.4gl0"), new DebSrc(DIST_ID_NEW, "2023-10-01", "rubygems", "3.4.20-1"));
269+
270+
var actual = new ReleaseNoteGenerator(gardenLinuxVersion, cvesOldVersion, cvesNewVersion, resolvedInNew, sourcePackagesInOldVersion, sourcePackagesInNewVersion).generate();
271+
272+
assertEquals(0, actual.getPackageList().size());
273+
}
274+
207275
}

src/test/resources/test-data/01-schema.sql

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
--
44

55
-- Dumped from database version 17.4 (Debian 17.4-1.pgdg120+2)
6-
-- Dumped by pg_dump version 17.4 (Debian 17.4-1.pgdg120+2)
6+
-- Dumped by pg_dump version 17.5 (Debian 17.5-1)
77

88
SET statement_timeout = 0;
99
SET lock_timeout = 0;
@@ -640,4 +640,5 @@ ALTER TABLE ONLY public.debsrc
640640

641641
--
642642
-- PostgreSQL database dump complete
643-
--
643+
--
644+

src/test/resources/test-data/02-sample-data.sql

Lines changed: 59 additions & 24 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)