diff --git a/core/src/main/java/hudson/model/Fingerprint.java b/core/src/main/java/hudson/model/Fingerprint.java index e7a2725225..ab5fc24cee 100644 --- a/core/src/main/java/hudson/model/Fingerprint.java +++ b/core/src/main/java/hudson/model/Fingerprint.java @@ -67,8 +67,6 @@ import java.util.Map.Entry; import java.util.TreeMap; import java.util.logging.Level; import java.util.logging.Logger; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; import edu.umd.cs.findbugs.annotations.CheckForNull; import edu.umd.cs.findbugs.annotations.NonNull; import org.springframework.security.access.AccessDeniedException; @@ -1184,7 +1182,7 @@ public class Fingerprint implements ModelObject, Saveable { return new AbstractCollection() { @Override public Iterator iterator() { - return Stream.concat(StreamSupport.stream(facets.spliterator(), false), transientFacets.stream()).iterator(); + return Iterators.sequence(facets.iterator(), transientFacets.iterator()); } @Override diff --git a/test/src/test/java/hudson/model/FingerprintTest.java b/test/src/test/java/hudson/model/FingerprintTest.java index 5d1299fb24..db56454952 100644 --- a/test/src/test/java/hudson/model/FingerprintTest.java +++ b/test/src/test/java/hudson/model/FingerprintTest.java @@ -45,6 +45,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Hashtable; +import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.logging.Level; @@ -413,6 +414,26 @@ public class FingerprintTest { assertEquals(200, page2.getWebResponse().getStatusCode()); } + @Test + @Issue("JENKINS-65611") + public void canModifyFacets() { + Fingerprint fingerprint = new Fingerprint(new Fingerprint.BuildPtr("foo", 3), + "stuff&more.jar", Util.fromHexString(SOME_MD5)); + TestFacet testFacet = new TestFacet(fingerprint, 0, "test"); + assertThat(fingerprint.getFacets().size(), is(0)); + fingerprint.getFacets().add(testFacet); + assertThat(fingerprint.getFacets().size(), is(1)); + assertTrue(fingerprint.getFacets().contains(testFacet)); + fingerprint.getFacets().remove(testFacet); + assertThat(fingerprint.getFacets().size(), is(0)); + fingerprint.getFacets().add(testFacet); + assertThat(fingerprint.getFacets().size(), is(1)); + Iterator itr = fingerprint.getFacets().iterator(); + itr.next(); + itr.remove(); + assertThat(fingerprint.getFacets().size(), is(0)); + } + @Test @Issue("SECURITY-2023") public void checkArbitraryEmptyFileExistence() throws Exception {