Browse code

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>

Steffan Karger authored on 2017/12/29 18:52:24
Showing 2 changed files
... ...
@@ -1257,6 +1257,7 @@ buffer_list_aggregate_separator(struct buffer_list *bl, const size_t max, const
1257 1257
                 e = next;
1258 1258
             }
1259 1259
             bl->head = f;
1260
+            bl->size -= count - 1;
1260 1261
             f->next = more;
1261 1262
             if (!more)
1262 1263
             {
... ...
@@ -138,8 +138,7 @@ test_buffer_list_aggregate_separator_two(void **state)
138 138
     /* Aggregate the first two elements */
139 139
     /* FIXME this exceeds the supplied max */
140 140
     buffer_list_aggregate_separator(ctx->one_two_three, 4, testsep);
141
-    /* FIXME size does not get adjusted after aggregating */
142
-    assert_int_equal(ctx->one_two_three->size, 3);
141
+    assert_int_equal(ctx->one_two_three->size, 2);
143 142
     struct buffer *buf = buffer_list_peek(ctx->one_two_three);
144 143
     assert_buf_equals_str(buf, teststr1 testsep teststr2 testsep);
145 144
 }
... ...
@@ -151,8 +150,7 @@ test_buffer_list_aggregate_separator_all(void **state)
151 151
 
152 152
     /* Aggregate all */
153 153
     buffer_list_aggregate_separator(ctx->one_two_three, 1<<16, testsep);
154
-    /* FIXME size does not get adjusted after aggregating */
155
-    assert_int_equal(ctx->one_two_three->size, 3);
154
+    assert_int_equal(ctx->one_two_three->size, 1);
156 155
     struct buffer *buf = buffer_list_peek(ctx->one_two_three);
157 156
     assert_buf_equals_str(buf,
158 157
                           teststr1 testsep teststr2 testsep teststr3 testsep);
... ...
@@ -165,8 +163,7 @@ test_buffer_list_aggregate_separator_nosep(void **state)
165 165
 
166 166
     /* Aggregate all */
167 167
     buffer_list_aggregate_separator(ctx->one_two_three, 1<<16, testnosep);
168
-    /* FIXME size does not get adjusted after aggregating */
169
-    assert_int_equal(ctx->one_two_three->size, 3);
168
+    assert_int_equal(ctx->one_two_three->size, 1);
170 169
     struct buffer *buf = buffer_list_peek(ctx->one_two_three);
171 170
     assert_buf_equals_str(buf, teststr1 teststr2 teststr3);
172 171
 }
... ...
@@ -179,8 +176,7 @@ test_buffer_list_aggregate_separator_zerolen(void **state)
179 179
 
180 180
     /* Aggregate all */
181 181
     buffer_list_aggregate_separator(bl_zerolen, 1<<16, testnosep);
182
-    /* FIXME size does not get adjusted after aggregating */
183
-    assert_int_equal(bl_zerolen->size, 2);
182
+    assert_int_equal(bl_zerolen->size, 1);
184 183
     struct buffer *buf = buffer_list_peek(bl_zerolen);
185 184
     assert_buf_equals_str(buf, "");
186 185
 }
... ...
@@ -193,8 +189,7 @@ test_buffer_list_aggregate_separator_emptybuffers(void **state)
193 193
 
194 194
     /* Aggregate all */
195 195
     buffer_list_aggregate_separator(bl_emptybuffers, 1<<16, testnosep);
196
-    /* FIXME size does not get adjusted after aggregating */
197
-    assert_int_equal(bl_emptybuffers->size, 2);
196
+    assert_int_equal(bl_emptybuffers->size, 1);
198 197
     struct buffer *buf = buffer_list_peek(bl_emptybuffers);
199 198
     assert_int_equal(BLEN(buf), 0);
200 199
 }