aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteffan Karger2017-12-29 10:52:24 +0100
committerGert Doering2018-01-09 17:09:13 +0100
commit463afdf57c52891936b9a856e1030b7ebc55e75c (patch)
tree9c585c3cda151265b14b1c3ba9db15f1e1042dc9
parentf447bc63c3928fd9b71e3df3768900a328f4f41a (diff)
downloadopenvpn-463afdf57c52891936b9a856e1030b7ebc55e75c.zip
openvpn-463afdf57c52891936b9a856e1030b7ebc55e75c.tar.gz
buffer_list_aggregate_separator(): update list size after aggregating
After aggregating a buffer_list, the size should be adjusted accordingly. Signed-off-by: Steffan Karger <steffan.karger@fox-it.com> Acked-by: Antonio Quartulli <antonio@openvpn.net> Message-Id: <1514541144-19407-1-git-send-email-steffan.karger@fox-it.com> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg16103.html Signed-off-by: Gert Doering <gert@greenie.muc.de>
-rw-r--r--src/openvpn/buffer.c1
-rw-r--r--tests/unit_tests/openvpn/test_buffer.c15
2 files changed, 6 insertions, 10 deletions
diff --git a/src/openvpn/buffer.c b/src/openvpn/buffer.c
index ecd3b17..8ea7bca 100644
--- a/src/openvpn/buffer.c
+++ b/src/openvpn/buffer.c
@@ -1257,6 +1257,7 @@ buffer_list_aggregate_separator(struct buffer_list *bl, const size_t max, const
e = next;
}
bl->head = f;
+ bl->size -= count - 1;
f->next = more;
if (!more)
{
diff --git a/tests/unit_tests/openvpn/test_buffer.c b/tests/unit_tests/openvpn/test_buffer.c
index c2b7f30..4841272 100644
--- a/tests/unit_tests/openvpn/test_buffer.c
+++ b/tests/unit_tests/openvpn/test_buffer.c
@@ -138,8 +138,7 @@ test_buffer_list_aggregate_separator_two(void **state)
/* Aggregate the first two elements */
/* FIXME this exceeds the supplied max */
buffer_list_aggregate_separator(ctx->one_two_three, 4, testsep);
- /* FIXME size does not get adjusted after aggregating */
- assert_int_equal(ctx->one_two_three->size, 3);
+ assert_int_equal(ctx->one_two_three->size, 2);
struct buffer *buf = buffer_list_peek(ctx->one_two_three);
assert_buf_equals_str(buf, teststr1 testsep teststr2 testsep);
}
@@ -151,8 +150,7 @@ test_buffer_list_aggregate_separator_all(void **state)
/* Aggregate all */
buffer_list_aggregate_separator(ctx->one_two_three, 1<<16, testsep);
- /* FIXME size does not get adjusted after aggregating */
- assert_int_equal(ctx->one_two_three->size, 3);
+ assert_int_equal(ctx->one_two_three->size, 1);
struct buffer *buf = buffer_list_peek(ctx->one_two_three);
assert_buf_equals_str(buf,
teststr1 testsep teststr2 testsep teststr3 testsep);
@@ -165,8 +163,7 @@ test_buffer_list_aggregate_separator_nosep(void **state)
/* Aggregate all */
buffer_list_aggregate_separator(ctx->one_two_three, 1<<16, testnosep);
- /* FIXME size does not get adjusted after aggregating */
- assert_int_equal(ctx->one_two_three->size, 3);
+ assert_int_equal(ctx->one_two_three->size, 1);
struct buffer *buf = buffer_list_peek(ctx->one_two_three);
assert_buf_equals_str(buf, teststr1 teststr2 teststr3);
}
@@ -179,8 +176,7 @@ test_buffer_list_aggregate_separator_zerolen(void **state)
/* Aggregate all */
buffer_list_aggregate_separator(bl_zerolen, 1<<16, testnosep);
- /* FIXME size does not get adjusted after aggregating */
- assert_int_equal(bl_zerolen->size, 2);
+ assert_int_equal(bl_zerolen->size, 1);
struct buffer *buf = buffer_list_peek(bl_zerolen);
assert_buf_equals_str(buf, "");
}
@@ -193,8 +189,7 @@ test_buffer_list_aggregate_separator_emptybuffers(void **state)
/* Aggregate all */
buffer_list_aggregate_separator(bl_emptybuffers, 1<<16, testnosep);
- /* FIXME size does not get adjusted after aggregating */
- assert_int_equal(bl_emptybuffers->size, 2);
+ assert_int_equal(bl_emptybuffers->size, 1);
struct buffer *buf = buffer_list_peek(bl_emptybuffers);
assert_int_equal(BLEN(buf), 0);
}