You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by de...@apache.org on 2010/07/09 14:55:21 UTC

svn commit: r962512 - in /activemq/trunk/activemq-core/src: main/java/org/apache/activemq/transport/stomp/FrameTranslator.java main/java/org/apache/activemq/transport/stomp/Stomp.java test/java/org/apache/activemq/transport/stomp/StompTest.java

Author: dejanb
Date: Fri Jul  9 12:55:21 2010
New Revision: 962512

URL: http://svn.apache.org/viewvc?rev=962512&view=rev
Log:
 https://issues.apache.org/activemq/browse/AMQ-2817 - sanitize stomp headers

Modified:
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/stomp/FrameTranslator.java
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/stomp/Stomp.java
    activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompTest.java

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/stomp/FrameTranslator.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/stomp/FrameTranslator.java?rev=962512&r1=962511&r2=962512&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/stomp/FrameTranslator.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/stomp/FrameTranslator.java Fri Jul  9 12:55:21 2010
@@ -121,8 +121,17 @@ public interface FrameTranslator {
             }
 
             // Stomp specific headers
-            o = headers.remove(Stomp.Headers.RECEIPT_REQUESTED);
-            
+            headers.remove(Stomp.Headers.RECEIPT_REQUESTED);
+
+            // Since we take the rest of the header and put them in properties which could then
+            // be sent back to a STOMP consumer we need to sanitize anything which could be in
+            // Stomp.Headers.Message and might get passed through to the consumer
+            headers.remove(Stomp.Headers.Message.MESSAGE_ID);
+            headers.remove(Stomp.Headers.Message.TIMESTAMP);
+            headers.remove(Stomp.Headers.Message.REDELIVERED);
+            headers.remove(Stomp.Headers.Message.SUBSCRIPTION);
+            headers.remove(Stomp.Headers.Message.USERID);
+
             // now the general headers
             msg.setProperties(headers);
         }

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/stomp/Stomp.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/stomp/Stomp.java?rev=962512&r1=962511&r2=962512&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/stomp/Stomp.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transport/stomp/Stomp.java Fri Jul  9 12:55:21 2010
@@ -62,7 +62,7 @@ public interface Stomp {
             String EXPIRATION_TIME = "expires";
             String PRIORITY = "priority";
             String TYPE = "type";
-            Object PERSISTENT = "persistent";
+            String PERSISTENT = "persistent";
         }
 
         public interface Message {

Modified: activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompTest.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompTest.java?rev=962512&r1=962511&r2=962512&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompTest.java (original)
+++ activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/stomp/StompTest.java Fri Jul  9 12:55:21 2010
@@ -23,6 +23,7 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.UnknownHostException;
 import java.util.HashMap;
+import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import javax.jms.BytesMessage;
@@ -1320,6 +1321,36 @@ public class StompTest extends Combinati
         assertEquals("system", message.getHeaders().get(Stomp.Headers.Message.USERID));
     }
 
+    public void testClientSetMessageIdIsIgnored() throws Exception {
+        HashMap<String, String> headers = new HashMap<String, String>();
+        headers.put(Stomp.Headers.Message.MESSAGE_ID, "Thisisnotallowed");
+        headers.put(Stomp.Headers.Message.TIMESTAMP, "1234");
+        headers.put(Stomp.Headers.Message.REDELIVERED, "true");
+        headers.put(Stomp.Headers.Message.SUBSCRIPTION, "Thisisnotallowed");
+        headers.put(Stomp.Headers.Message.USERID, "Thisisnotallowed");
+
+
+        stompConnection.connect("system", "manager");
+
+
+        stompConnection.send("/queue/" + getQueueName(), "msg", null, headers);
+
+        stompConnection.subscribe("/queue/" + getQueueName());
+        StompFrame stompMessage = stompConnection.receive();
+
+        Map<String, String> mess_headers = new HashMap<String, String>();
+        mess_headers = stompMessage.getHeaders();
+
+        assertFalse("Thisisnotallowed".equals(mess_headers.get(Stomp.Headers.Message.MESSAGE_ID)
+                ));
+        assertFalse("1234".equals(mess_headers.get(Stomp.Headers.Message.TIMESTAMP)));
+        assertNull(mess_headers.get(Stomp.Headers.Message.REDELIVERED));
+        assertNull(mess_headers.get(Stomp.Headers.Message.SUBSCRIPTION));
+        assertEquals("system", mess_headers.get(Stomp.Headers.Message.USERID));
+
+    }
+
+
     protected void assertClients(int expected) throws Exception {
         org.apache.activemq.broker.Connection[] clients = broker.getBroker().getClients();
         int actual = clients.length;