[
https://issues.apache.org/jira/browse/AMQ-8409?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Michael Justin updated AMQ-8409:
--------------------------------
Attachment: image-2021-11-07-12-04-34-856.png
> Unexpected \\r instead of \r in header property in incoming messages
> --------------------------------------------------------------------
>
> Key: AMQ-8409
> URL: https://issues.apache.org/jira/browse/AMQ-8409
> Project: ActiveMQ
> Issue Type: Improvement
> Components: STOMP
> Environment: Broker: ActiveMQ 5.16.3
> OS: Windows 10
> Client: own implementation
> Reporter: Michael Justin
> Priority: Major
> Attachments: image-2021-11-07-12-04-34-856.png
>
>
> I tested the Stomp acceptor handling of escape sequences as specified in the
> 1.2 protocol documentation.
> With ActiveMQ Artemis 2.19.0, all escape sequences are received with as
> expected.
> With ActiveMQ "Classic" however, there is a difference: the \r escape
> sequence is incorrectly converted to
> r by the broker.
> The first example uses the Artemis broker. A message with four special
> escaped characters (backslash, colon, newline and carriage return) is sent to
> the broker and then received with identical values. As you can see in the
> example, the header property {{*keyr*}} in the outgoing {{SEND}} frame has
> the value *value\r* and is received as *value\r* in the incoming {{MESSAGE}}
> frame. Unescaped, this is "value" + carriage return
> {noformat}
> ("\r (octet 92 and 114) translates to carriage return (octet 13)"{noformat}
> https://stomp.github.io/stomp-specification-1.2.html#Value_Encoding
>
> {noformat}
> CONNECTED
> version:1.2
> session:be014f64
> server:ActiveMQ-Artemis/2.19.0 ActiveMQ Artemis Messaging Engine
>
> SEND
> destination:queue/TStomp12TestCase.TestEscapes.Q
> keyb:value\\
> keyc:value\c
> keyn:value\n
> keyr:value\r
> content-type:text/plain
>
> Send:Bytes:112
> SUBSCRIBE
> destination:queue/TStomp12TestCase.TestEscapes.Q
> ack:auto
> id:{13084522-1FEF-4B8A-802A-4656A77784EA}
>
> MESSAGE
> subscription:{13084522-1FEF-4B8A-802A-4656A77784EA}
> message-id:10737418259
> destination:queue/TStomp12TestCase.TestEscapes.Q
> expires:0
> redelivered:false
> priority:4
> persistent:false
> timestamp:1636280945342
> content-type:text/plain
> keyn:value\n
> keyc:value\c
> keyb:value\\
> keyr:value\r
> {noformat}
>
> With ActiveMQ, the header property {{*keyr*}} in the outgoing {{SEND}} frame
> has the value *value\r* and is received as *value*
> *r* in the incoming {{MESSAGE}} frame.
> {noformat}
> CONNECTED
> server:ActiveMQ/5.16.3
> heart-beat:0,0
> session:ID:DESKTOP-3LKMPLS-49926-1636281770555-3:4
> version:1.2
> SEND
> destination:/queue/TStomp12TestCase.TestEscapes.Q
> keyb:value\\
> keyc:value\c
> keyn:value\n
> keyr:value\r
> content-type:text/plain
> SUBSCRIBE
> destination:/queue/TStomp12TestCase.TestEscapes.Q
> ack:auto
> id:{7316E53E-E7C3-43DC-B2EF-75BCFC09D899}
> MESSAGE
> keyr:value\\r
> expires:0
> destination:/queue/TStomp12TestCase.TestEscapes.Q
> subscription:{7316E53E-E7C3-43DC-B2EF-75BCFC09D899}
> priority:4
> keyb:value\\
> keyc:value\c
> message-id:ID\cDESKTOP-3LKMPLS-49926-1636281770555-3\c4\c-1\c1\c1
> content-type:text/plain
> keyn:value\n
> timestamp:1636281794663
> {noformat}
> If the client receives un-escapes *value\\r* according Stomp 1.2 rules, which
> define \\ as the escape sequence for a backslash, the client interprets this
> as {*}value\r{*}.
> {noformat}
> \\ (octet 92 and 92) translates to \ (octet 92)
> {noformat}
> https://stomp.github.io/stomp-specification-1.2.html#Value_Encoding
> So ActiveMQ Classic performs either an incorrect unescaping on the incoming
> message, or an incorrect escaping on the outgoing message.
>
--
This message was sent by Atlassian Jira
(v8.20.1#820001)