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);
     }