SLING-9049 - DistributionPublisher does not validate queue names
diff --git a/src/main/java/org/apache/sling/distribution/journal/impl/publisher/DistributionPublisher.java b/src/main/java/org/apache/sling/distribution/journal/impl/publisher/DistributionPublisher.java
index 52b6a7a..55787dc 100644
--- a/src/main/java/org/apache/sling/distribution/journal/impl/publisher/DistributionPublisher.java
+++ b/src/main/java/org/apache/sling/distribution/journal/impl/publisher/DistributionPublisher.java
@@ -19,6 +19,7 @@
package org.apache.sling.distribution.journal.impl.publisher;
+import static java.util.stream.StreamSupport.stream;
import static org.apache.sling.distribution.journal.impl.shared.DistributionMetricsService.timed;
import static java.util.Objects.requireNonNull;
import static org.apache.sling.distribution.DistributionRequestState.ACCEPTED;
@@ -232,8 +233,11 @@
@Override
public DistributionQueue getQueue(String queueName) {
- // We expect queueName to come from #getQueueNames
- // and this, queueName matches <subAgentId>-error or <subAgentId>
+ // validate that queueName is a valid name returned by #getQueueNames
+ if (stream(getQueueNames().spliterator(), true).noneMatch(queueName::equals)) {
+ return null;
+ }
+
return queueName.endsWith("-error") ? getErrorQueue(queueName) : getPubQueue(queueName);
}
diff --git a/src/test/java/org/apache/sling/distribution/journal/impl/publisher/DistributionPublisherTest.java b/src/test/java/org/apache/sling/distribution/journal/impl/publisher/DistributionPublisherTest.java
index 8c6293f..7ab2bdf 100644
--- a/src/test/java/org/apache/sling/distribution/journal/impl/publisher/DistributionPublisherTest.java
+++ b/src/test/java/org/apache/sling/distribution/journal/impl/publisher/DistributionPublisherTest.java
@@ -23,6 +23,7 @@
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.notNullValue;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.verify;
@@ -56,6 +57,7 @@
import org.apache.sling.distribution.agent.spi.DistributionAgent;
import org.apache.sling.distribution.common.DistributionException;
import org.apache.sling.distribution.packaging.DistributionPackageBuilder;
+import org.apache.sling.distribution.queue.spi.DistributionQueue;
import org.apache.sling.settings.SlingSettingsService;
import org.junit.After;
import org.junit.Before;
@@ -238,6 +240,14 @@
// TODO Add assertions
}
+ @Test
+ public void testGetWrongQueue() throws DistributionException, IOException {
+ when(discoveryService.getTopologyView()).thenReturn(topology);
+ when(topology.getSubscribedAgentIds(PUB1AGENT1)).thenReturn(Collections.singleton(QUEUE_NAME));
+ DistributionQueue queue = publisher.getQueue("i_am_not_a_queue");
+ assertNull(queue);
+ }
+
private State stateWithMaxRetries(int maxRetries) {
return new State(PUB1AGENT1, SUBAGENT1, 0, 1, 0, maxRetries, false);
}