summaryrefslogtreecommitdiff
path: root/librpc
diff options
context:
space:
mode:
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>2020-08-06 17:07:09 +1200
committerDouglas Bagnall <dbagnall@samba.org>2020-08-07 04:44:17 +0000
commitfc83b470513890c30bbb26ebd3a9ab4438b3d4a4 (patch)
treef4f0932e7c80354fd5406cbc7f5eb1f9e9640ab2 /librpc
parentbf16cd72b285662bcb4367cd2bdd6eac7655254f (diff)
downloadsamba-fc83b470513890c30bbb26ebd3a9ab4438b3d4a4.tar.gz
libprc/test: add pull_string_array large array test
Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abartlet@samba.org> Autobuild-User(master): Douglas Bagnall <dbagnall@samba.org> Autobuild-Date(master): Fri Aug 7 04:44:17 UTC 2020 on sn-devel-184
Diffstat (limited to 'librpc')
-rw-r--r--librpc/tests/test_ndr_string.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/librpc/tests/test_ndr_string.c b/librpc/tests/test_ndr_string.c
index 571aae42f34..24ec93b17d5 100644
--- a/librpc/tests/test_ndr_string.c
+++ b/librpc/tests/test_ndr_string.c
@@ -159,13 +159,47 @@ static void test_ndr_string_n_length(void **state)
assert_int_equal(len, 26);
}
+static void test_pull_string_array(void **state)
+{
+ /* We try pulling long string arrays without long strings */
+ const char **r = NULL;
+ struct ndr_pull ndr = {0};
+ enum ndr_err_code err;
+ TALLOC_CTX *mem_ctx = talloc_new(NULL);
+ size_t len = 1 * 1024 * 1024;
+ uint8_t *data = talloc_array(mem_ctx, uint8_t, len);
+ size_t i;
+
+ for (i = 0; i < len; i++) {
+ data[i] = (i & 1) ? '\0' : 'X';
+ }
+
+ ndr.current_mem_ctx = mem_ctx;
+
+ ndr.flags = (LIBNDR_FLAG_REF_ALLOC |
+ LIBNDR_FLAG_REMAINING |
+ LIBNDR_FLAG_STR_NULLTERM |
+ LIBNDR_FLAG_STR_RAW8);
+ ndr.data = data;
+ ndr.data_size = len;
+
+ err = ndr_pull_string_array(&ndr, NDR_SCALARS, &r);
+ assert_int_equal(err, NDR_ERR_SUCCESS);
+ assert_string_equal(r[0], "X");
+ assert_string_equal(r[len / 3], "X");
+ assert_string_equal(r[len / 2 - 1], "X");
+ assert_ptr_equal(r[len / 2], NULL);
+ TALLOC_FREE(mem_ctx);
+}
+
int main(int argc, const char **argv)
{
const struct CMUnitTest tests[] = {
cmocka_unit_test(test_pull_string_zero_len_nul_term),
cmocka_unit_test(test_pull_string_len_1_nul_term),
cmocka_unit_test(test_pull_string_len_2_nul_term),
- cmocka_unit_test(test_ndr_string_n_length)
+ cmocka_unit_test(test_ndr_string_n_length),
+ cmocka_unit_test(test_pull_string_array)
};
cmocka_set_message_output(CM_OUTPUT_SUBUNIT);