You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kp...@apache.org on 2020/08/18 12:55:08 UTC
[qpid-proton] branch array-of-lists-first-list-empty updated
(8e0ba29 -> e4e0342)
This is an automated email from the ASF dual-hosted git repository.
kpvdr pushed a change to branch array-of-lists-first-list-empty
in repository https://gitbox.apache.org/repos/asf/qpid-proton.git.
discard 8e0ba29 NO_JIRA: Removed header files which are no longer used in c/tests/data_test.cpp
discard 5975c20 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.
omit e34407f PROTON-2244: Added some additional arrays of list test cases
omit a0dde4b PROTON-2244: Added tests for arrays of char and decimal32/64/128.
omit 2530f3e PROTON-2244: Further improvements to array check: fail if error during encoding or decoding
omit a8c96ab PROTON-2244: Fix for non-linux compilers and non-portable float types
omit 9bcec75 PROTON-2244: Removed debug statements erroneously left in code from previous commit
omit 00d9446 PROTON-2244: Removed array codec tests from Python to C/C++ tests as requested
omit f9d0940 PROTON-2244: Added a set of array encode-decode tests for Data.Array, including a array of lists test which catches this bug.
omit a35187c PROTON-2244: Minor correction to comment text
omit a675dee PROTON-2244: Correction on previous fix, prevent zero-length array encoding for all array memebers of an array
omit a19cace PROTON-2244: Fix for Array of lists with first list empty encoding
new e4e0342 PROTON-2244: Fix for Array of lists with first list empty encoding
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (8e0ba29)
\
N -- N -- N refs/heads/array-of-lists-first-list-empty (e4e0342)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[qpid-proton] 01/01: PROTON-2244: Fix for Array of lists with first
list empty encoding
Posted by kp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
kpvdr pushed a commit to branch array-of-lists-first-list-empty
in repository https://gitbox.apache.org/repos/asf/qpid-proton.git
commit e4e0342b9f824ef481002f9ae0c98cece090fc5e
Author: Kim van der Riet <kp...@apache.org>
AuthorDate: Wed Jul 1 12:15:04 2020 -0400
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
---
c/src/core/encoder.c | 5 +++--
c/tests/data_test.cpp | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 54 insertions(+), 2 deletions(-)
diff --git a/c/src/core/encoder.c b/c/src/core/encoder.c
index 2be808c..472ea3b 100644
--- a/c/src/core/encoder.c
+++ b/c/src/core/encoder.c
@@ -336,8 +336,9 @@ static int pni_encoder_exit(void *ctx, pn_data_t *data, pni_node_t *node)
pn_encoder_t *encoder = (pn_encoder_t *) ctx;
char *pos;
- // Special case 0 length list
- if (node->atom.type==PN_LIST && node->children-encoder->null_count==0) {
+ // Special case 0 length list, but not as element in an array
+ pni_node_t *parent = pn_data_node(data, node->parent);
+ if (node->atom.type==PN_LIST && node->children-encoder->null_count==0 && !pn_is_in_array(data, parent, node)) {
encoder->position = node->start-1; // position of list opcode
pn_encoder_writef8(encoder, PNE_LIST0);
encoder->null_count = 0;
diff --git a/c/tests/data_test.cpp b/c/tests/data_test.cpp
index a15c1b4..db6f554 100644
--- a/c/tests/data_test.cpp
+++ b/c/tests/data_test.cpp
@@ -26,6 +26,8 @@
#include <proton/codec.h>
#include <proton/error.h>
+#include <cstdarg>
+
using namespace pn_test;
// Make sure we can grow the capacity of a pn_data_t all the way to the max and
@@ -105,3 +107,52 @@ TEST_CASE("data_multiple") {
pn_data_fill(data, "{S[iii]SI}", "foo", 1, 987, 3, "bar", 965);
CHECK("{\"foo\"=[1, 987, 3], \"bar\"=965}" == inspect(data));
}
+
+
+#define BUFSIZE 1024
+static void check_encode_decode(auto_free<pn_data_t, pn_data_free>& src) {
+ char buf[BUFSIZE];
+ auto_free<pn_data_t, pn_data_free> data(pn_data(1));
+ pn_data_clear(data);
+
+ // Encode src array to buf
+ int enc_size = pn_data_encode(src, buf, BUFSIZE - 1);
+ if (enc_size < 0) {
+ FAIL("pn_data_encode() error " << enc_size << ": " << pn_code(enc_size));
+ }
+
+ // Decode buf to data
+ int dec_size = pn_data_decode(data, buf, BUFSIZE - 1);
+ pn_error_t *dec_err = pn_data_error(data);
+ if (dec_size < 0) {
+ FAIL("pn_data_decode() error " << dec_size << ": " << pn_code(dec_size));
+ }
+
+ // Checks
+ CHECK(enc_size == dec_size);
+ CHECK(inspect(src) == inspect(data));
+}
+
+static void check_array(const char *fmt, ...) {
+ auto_free<pn_data_t, pn_data_free> src(pn_data(1));
+ pn_data_clear(src);
+
+ // Create src array
+ va_list ap;
+ va_start(ap, fmt);
+ pn_data_vfill(src, fmt, ap);
+ va_end(ap);
+
+ check_encode_decode(src);
+}
+
+TEST_CASE("array_list") {
+ check_array("@T[]", PN_LIST);
+ // TODO: PROTON-2248: using S and s reversed
+ // empty list as first array element
+ check_array("@T[[][oo][][iii][Sosid]]", PN_LIST, true, false, 1, 2, 3, "hello", false, "world", 43210, 2.565e-56);
+ // empty list not as first array element
+ check_array("@T[[Sid][oooo][]]", PN_LIST, "aaa", 123, double(3.2415), true, true, false, true);
+ // only empty lists
+ check_array("@T[[][][][][]]", PN_LIST);
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org