[ 
https://issues.apache.org/jira/browse/PROTON-2244?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17155544#comment-17155544
 ] 

ASF GitHub Bot commented on PROTON-2244:
----------------------------------------

gemmellr commented on pull request #263:
URL: https://github.com/apache/qpid-proton/pull/263#issuecomment-656728966


   I would be inclined to add some tests that verify the encoded bytes are 
exactly as expected, and not just encode+decode things to check that the 
pn_data that goes into encode is what comes out of decode. The latter is still 
useful, but it mainly verifies there isnt a different understanding between the 
encoder and decoder, and not really that they actually encoded/decoded things 
correctly.
   
   Indeed, as you have pointed out the formatting stuff being used in the test 
is actually currently encoding String/Symbol values differently that its 
described behaviour (which as Andrew noted elsewhere may just be a internal doc 
issue, but every single use of those values now needs to be checked to ensure 
that). The same could be[come] true in other cases either now or at a later 
point, along with other encode/decode bugs, in a way the test simply wouldn't 
notice (something thats happened before).
   
   I'd also suggest some obvious test cases that are worth adding at the same 
time (unless they already exist elsewhere) based on the changes being made, 
like an array of only empty lists (which may encode quite differently if it 
uses list0 type; no list count/size), and an array where an empty list isnt the 
first element.


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


> [Proton-c] Encoder error for array of lists where first list in array is empty
> ------------------------------------------------------------------------------
>
>                 Key: PROTON-2244
>                 URL: https://issues.apache.org/jira/browse/PROTON-2244
>             Project: Qpid Proton
>          Issue Type: Task
>          Components: proton-c
>            Reporter: Kim van der Riet
>            Priority: Major
>
> AMQP encodes arrays with a single element constructor which should be 
> identical for all elements in the array. However, if an array of lists is 
> constructed in which the first list is empty, then the AMQP empty list 
> constructor is used in the array, and the following lists which may be 
> non-empty, will not be decoded correctly.
> {noformat}
> >>> import proton
> >>> a = proton.Array(proton.UNDESCRIBED, proton.Data.LIST, [], [1,2,3], 
> >>> ['aaa', 'bbb', 'ccc'])
> >>> d1 = proton.Data()
> >>> d1.put_py_array(a)
> >>> d1.encode().hex()
> 'f00000002a00000003450000000a000000035501550255030000001300000003a103616161a103626262a103636363'
> {noformat}
> which, when broken down into parts, looks as follows:
> {noformat}
> f0 000002a 00000003 45 <-- Array constructor, size=0x2a, len=3, type=empty 
> list
>                     ^^--- Empty list constructor
> 0000000a 00000003 5501 5502 5503 <- data for [1,2,3]
> 00000013 00000003 a103616161 a103626262 a103636363 <-- data for ['aaa', 
> 'bbb', 'ccc']
> {noformat}
> When decoded, this is being interpreted as an array of empty lists:
> {noformat}
> >>> d2 = proton.Data()
> >>> d2.decode(d1.encode())
> 10
> >>> d2.get_py_array()
> Array(UNDESCRIBED, 24, [], [], [])
> {noformat}
> When a mis-encoded array is used in the body of a message and is decoded, an 
> error results:
> {noformat}
> >>> import proton
> >>> a = proton.Array(proton.UNDESCRIBED, proton.Data.LIST, [], [1,2,3], 
> >>> ['aaa', 'bbb', 'ccc'])
> >>> m1 = proton.Message(body=a)
> >>> m1
> Message(priority=4, body=Array(UNDESCRIBED, 24, [], [1, 2, 3], ['aaa', 'bbb', 
> 'ccc']))
> >>> m2 = proton.Message()
> >>> m2.decode(m1.encode())
> Traceback (most recent call last):
>  File "<stdin>", line 1, in <module>
>  File 
> "/home/kvdr/RedHat/install/lib64/proton/bindings/python3/proton/_message.py", 
> line 488, in decode
>  self._check(pn_message_decode(self._msg, data))
>  File 
> "/home/kvdr/RedHat/install/lib64/proton/bindings/python3/proton/_message.py", 
> line 87, in _check
>  raise exc("[%s]: %s" % (err, pn_error_text(pn_message_error(self._msg))))
> proton._exceptions.MessageException: [-6]: data error: (null)
> {noformat}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to