[
https://issues.apache.org/jira/browse/PROTON-2244?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17179595#comment-17179595
]
ASF subversion and git services commented on PROTON-2244:
---------------------------------------------------------
Commit e4e0342b9f824ef481002f9ae0c98cece090fc5e 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=e4e0342 ]
PROTON-2244: Fix for Array of lists with first list empty encoding
PROTON-2244: Correction on previous fix, prevent zero-length array encoding for
all array memebers of an array
PROTON-2244: Minor correction to comment text
PROTON-2244: Added a set of array encode-decode tests for Data.Array, including
a array of lists test which catches this bug.
PROTON-2244: Removed array codec tests from Python to C/C++ tests as requested
PROTON-2244: Removed debug statements erroneously left in code from previous
commit
PROTON-2244: Fix for non-linux compilers and non-portable float types
PROTON-2244: Further improvements to array check: fail if error during encoding
or decoding
PROTON-2244: Added tests for arrays of char and decimal32/64/128.
PROTON-2244: Added some additional arrays of list test cases
PROTON-2244: Removed array tests of all but array of lists, as this is the
issue. The consensus is that we need to make the tests compare encoded bytes
with expected encoded bytes, not perform an encode/decode comparison as these
tests do at present. This should be done at a later time.
NO_JIRA: Removed header files which are no longer used in c/tests/data_test.cpp
> [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]