diff options
author | Douglas Bagnall <douglas.bagnall@catalyst.net.nz> | 2020-08-06 17:07:09 +1200 |
---|---|---|
committer | Douglas Bagnall <dbagnall@samba.org> | 2020-08-07 04:44:17 +0000 |
commit | fc83b470513890c30bbb26ebd3a9ab4438b3d4a4 (patch) | |
tree | f4f0932e7c80354fd5406cbc7f5eb1f9e9640ab2 /librpc | |
parent | bf16cd72b285662bcb4367cd2bdd6eac7655254f (diff) | |
download | samba-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.c | 36 |
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); |