[ 
https://issues.apache.org/jira/browse/ARTEMIS-5182?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Tommy Lindgren updated ARTEMIS-5182:
------------------------------------
    Description: 
If {{noLocal}} is enabled, {{StompConnection.java}} adds {{ AND AMQ_CID<>xxx}} 
to the selector _without_ wrapping the original expression in parentheses which 
means not all messages sent to the topic are filtered properly.

For example, if the original selector is {{{}foo=1 or bar=2{}}}, the new 
selector will be {{foo=1 or bar=2 and __AMQ_CID<>xxx}}, so messages with only 
{{foo=1}} won't respect {{noLocal}}.

Untested potential patch:
{noformat}
diff --git 
a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java
 
b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java
index 742c2a8d79..8527eea8a2 100644
--- 
a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java
+++ 
b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java
@@ -566,7 +566,7 @@ public final class StompConnection extends 
AbstractRemotingConnection {
          if (selector == null) {
             selector = noLocalFilter;
          } else {
-            selector += " AND " + noLocalFilter;
+            selector = "(" + selector + ") AND " + noLocalFilter;
          }
       }{noformat}
 

  was:
If {{noLocal}} is enabled, {{StompConnection.java}} adds{{{} AND 
_{}}}{_}{{AMQ_CID<>xxx}}{_} to the selector _without_ wrapping the original 
expression in parentheses which means not all messages sent to the topic are 
filtered properly.

For example, if the original selector is {{{}foo=1 or bar=2{}}}, the new 
selector will be {{{}foo=1 or bar=2 and __AMQ_CID<>xxx{}}}, so messages with 
only{{ foo=1}} won't respect {{{}noLocal{}}}.

Untested potential patch:
{noformat}
diff --git 
a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java
 
b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java
index 742c2a8d79..8527eea8a2 100644
--- 
a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java
+++ 
b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java
@@ -566,7 +566,7 @@ public final class StompConnection extends 
AbstractRemotingConnection {
          if (selector == null) {
             selector = noLocalFilter;
          } else {
-            selector += " AND " + noLocalFilter;
+            selector = "(" + selector + ") AND " + noLocalFilter;
          }
       }{noformat}
 


> Stomp connection may use bad selector when noLocal is enabled
> -------------------------------------------------------------
>
>                 Key: ARTEMIS-5182
>                 URL: https://issues.apache.org/jira/browse/ARTEMIS-5182
>             Project: ActiveMQ Artemis
>          Issue Type: Bug
>          Components: STOMP
>    Affects Versions: 2.37.0
>            Reporter: Tommy Lindgren
>            Assignee: Justin Bertram
>            Priority: Major
>
> If {{noLocal}} is enabled, {{StompConnection.java}} adds {{ AND 
> AMQ_CID<>xxx}} to the selector _without_ wrapping the original expression in 
> parentheses which means not all messages sent to the topic are filtered 
> properly.
> For example, if the original selector is {{{}foo=1 or bar=2{}}}, the new 
> selector will be {{foo=1 or bar=2 and __AMQ_CID<>xxx}}, so messages with only 
> {{foo=1}} won't respect {{noLocal}}.
> Untested potential patch:
> {noformat}
> diff --git 
> a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java
>  
> b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java
> index 742c2a8d79..8527eea8a2 100644
> --- 
> a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java
> +++ 
> b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java
> @@ -566,7 +566,7 @@ public final class StompConnection extends 
> AbstractRemotingConnection {
>           if (selector == null) {
>              selector = noLocalFilter;
>           } else {
> -            selector += " AND " + noLocalFilter;
> +            selector = "(" + selector + ") AND " + noLocalFilter;
>           }
>        }{noformat}
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information, visit: https://activemq.apache.org/contact


Reply via email to