[ https://issues.apache.org/jira/browse/PROTON-2244?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17154900#comment-17154900 ]
ASF subversion and git services commented on PROTON-2244: --------------------------------------------------------- Commit 9bcec751c0e5444c5397df0eaf48d0da72a1a0b8 in qpid-proton's branch refs/heads/array-of-lists-first-list-empty from Kim van der Riet [ https://gitbox.apache.org/repos/asf?p=qpid-proton.git;h=9bcec75 ] PROTON-2244: Removed debug statements erroneously left in code from previous commit > [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: dev-unsubscr...@qpid.apache.org For additional commands, e-mail: dev-h...@qpid.apache.org