The Samba-Bugzilla – Attachment 15661 Details for
Bug 13874
ndr_pull_string_array() looping in drsblobs decode_Packages()
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Updated tests
ndr-tests.patch (text/plain), 5.76 KB, created by
Gary Lockyer
on 2019-12-03 01:26:02 UTC
(
hide
)
Description:
Updated tests
Filename:
MIME Type:
Creator:
Gary Lockyer
Created:
2019-12-03 01:26:02 UTC
Size:
5.76 KB
patch
obsolete
>From 957cb1e6092f0aabbdc9d7399398b29798d0f66a Mon Sep 17 00:00:00 2001 >From: Gary Lockyer <gary@catalyst.net.nz> >Date: Mon, 2 Dec 2019 15:54:08 +1300 >Subject: [PATCH] librpc ndr tests: Tests for ndr_pull_string > >Signed-off-by: Gary Lockyer <gary@catalyst.net.nz> >--- > librpc/tests/test_ndr_string.c | 140 +++++++++++++++++++++++++++++++++ > librpc/wscript_build | 11 +++ > source4/selftest/tests.py | 2 + > 3 files changed, 153 insertions(+) > create mode 100644 librpc/tests/test_ndr_string.c > >diff --git a/librpc/tests/test_ndr_string.c b/librpc/tests/test_ndr_string.c >new file mode 100644 >index 00000000000..6baa41bec31 >--- /dev/null >+++ b/librpc/tests/test_ndr_string.c >@@ -0,0 +1,140 @@ >+/* >+ * Tests for librpc ndr_string.c >+ * >+ * Copyright (C) Catalyst.NET Ltd 2019 >+ * >+ * This program is free software; you can redistribute it and/or modify >+ * it under the terms of the GNU General Public License as published by >+ * the Free Software Foundation; either version 3 of the License, or >+ * (at your option) any later version. >+ * >+ * This program is distributed in the hope that it will be useful, >+ * but WITHOUT ANY WARRANTY; without even the implied warranty of >+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >+ * GNU General Public License for more details. >+ * >+ * You should have received a copy of the GNU General Public License >+ * along with this program. If not, see <http://www.gnu.org/licenses/>. >+ * >+ */ >+ >+/* >+ * from cmocka.c: >+ * These headers or their equivalents should be included prior to >+ * including >+ * this header file. >+ * >+ * #include <stdarg.h> >+ * #include <stddef.h> >+ * #include <setjmp.h> >+ * >+ * This allows test applications to use custom definitions of C standard >+ * library functions and types. >+ * >+ */ >+#include <stdarg.h> >+#include <stddef.h> >+#include <stdint.h> >+#include <setjmp.h> >+#include <cmocka.h> >+ >+#include "librpc/ndr/ndr_string.c" >+ >+/* >+ * Try and pull a null terminated string from a zero length buffer >+ * Should fail for both 1 byte, and 2 byte character strings. >+ */ >+static void test_pull_string_zero_len_nul_term(void **state) >+{ >+ struct ndr_pull ndr = {0}; >+ enum ndr_err_code err; >+ int flags = NDR_SCALARS; >+ uint8_t data[] = {0x0, 0x0}; >+ const char *s = NULL; >+ >+ ndr.flags = LIBNDR_FLAG_STR_UTF8 | LIBNDR_FLAG_STR_NULLTERM; >+ ndr.data = data; >+ ndr.data_size = 0; >+ err = ndr_pull_string(&ndr, flags, &s); >+ assert_int_equal(err, NDR_ERR_BUFSIZE); >+ assert_null(s); >+ assert_int_equal(0, ndr.offset); >+ >+ ndr.flags = LIBNDR_FLAG_STR_NULLTERM; >+ ndr.offset = 0; >+ err = ndr_pull_string(&ndr, flags, &s); >+ assert_int_equal(err, NDR_ERR_BUFSIZE); >+ assert_null(s); >+ assert_int_equal(0, ndr.offset); >+ >+} >+ >+/* >+ * Try and pull a null terminated string from a 1 byte buffer >+ * Should succeed for 1 byte character and >+ * fail for 2 byte character strings. >+ */ >+static void test_pull_string_len_1_nul_term(void **state) >+{ >+ struct ndr_pull ndr = {0}; >+ enum ndr_err_code err; >+ int flags = NDR_SCALARS; >+ const char *s = NULL; >+ uint8_t data[] = {0x0, 0x0}; >+ >+ ndr.flags = LIBNDR_FLAG_STR_UTF8 | LIBNDR_FLAG_STR_NULLTERM; >+ ndr.data = data; >+ ndr.data_size = 1; >+ err = ndr_pull_string(&ndr, flags, &s); >+ assert_int_equal(err, NDR_ERR_SUCCESS); >+ assert_non_null(s); >+ assert_int_equal(1, ndr.offset); >+ >+ ndr.offset = 0; >+ ndr.flags = LIBNDR_FLAG_STR_NULLTERM; >+ err = ndr_pull_string(&ndr, flags, &s); >+ assert_int_equal(err, NDR_ERR_BUFSIZE); >+ assert_int_equal(0, ndr.offset); >+} >+ >+/* >+ * Try and pull a null terminated string from a 2 byte buffer >+ * Should succeed for both 1 byte, and 2 byte character strings. >+ */ >+static void test_pull_string_len_2_nul_term(void **state) >+{ >+ struct ndr_pull ndr = {0}; >+ enum ndr_err_code err; >+ int flags = NDR_SCALARS; >+ const char *s; >+ uint8_t data[] = {0x0, 0x0}; >+ >+ ndr.flags = LIBNDR_FLAG_STR_UTF8 | LIBNDR_FLAG_STR_NULLTERM; >+ ndr.data = data; >+ ndr.data_size = 2; >+ err = ndr_pull_string(&ndr, flags, &s); >+ assert_int_equal(err, NDR_ERR_SUCCESS); >+ assert_non_null(s); >+ assert_int_equal(1, ndr.offset); >+ >+ ndr.offset = 0; >+ ndr.flags = LIBNDR_FLAG_STR_NULLTERM; >+ err = ndr_pull_string(&ndr, flags, &s); >+ assert_int_equal(err, NDR_ERR_SUCCESS); >+ assert_non_null(s); >+ assert_int_equal(2, ndr.offset); >+ >+ >+} >+ >+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_set_message_output(CM_OUTPUT_SUBUNIT); >+ return cmocka_run_group_tests(tests, NULL, NULL); >+} >diff --git a/librpc/wscript_build b/librpc/wscript_build >index 2582a281139..88964ed2a9a 100644 >--- a/librpc/wscript_build >+++ b/librpc/wscript_build >@@ -664,3 +664,14 @@ bld.SAMBA_SUBSYSTEM('NDR_FSRVP_STATE', > source='gen_ndr/ndr_fsrvp_state.c', > public_deps='ndr' > ) >+# >+# Cmocka tests >+# >+bld.SAMBA_BINARY('test_ndr_string', >+ source='tests/test_ndr_string.c', >+ deps=''' >+ cmocka >+ talloc >+ ndr >+ ''', >+ for_selftest=True) >diff --git a/source4/selftest/tests.py b/source4/selftest/tests.py >index 642dc680fa4..e9d83a0acf6 100755 >--- a/source4/selftest/tests.py >+++ b/source4/selftest/tests.py >@@ -1317,6 +1317,8 @@ plantestsuite("samba4.dcerpc.dnsserver.dnsutils", "none", > [os.path.join(bindir(), "test_rpc_dns_server_dnsutils")]) > plantestsuite("libcli.drsuapi.repl_decrypt", "none", > [os.path.join(bindir(), "test_repl_decrypt")]) >+plantestsuite("librpc.ndr.ndr_string", "none", >+ [os.path.join(bindir(), "test_ndr_string")]) > > # process restart and limit tests, these break the environment so need to run > # in their own specific environment >-- >2.17.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Flags:
abartlet
:
review+
Actions:
View
Attachments on
bug 13874
:
15602
|
15659
| 15661