From d792ee488372c7259567d12b141cf449c0bdb6a8 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 10 Dec 2004 22:36:46 +0000 Subject: r4139: 2nd attempt at fixing the null ptr in size_is() problem. (This used to be commit 3040cd65151dbcc54404f9be9d1fbcf539c7b635) --- source4/build/pidl/parser.pm | 8 ++++++-- source4/librpc/ndr/ndr.c | 10 ++-------- 2 files changed, 8 insertions(+), 10 deletions(-) (limited to 'source4') diff --git a/source4/build/pidl/parser.pm b/source4/build/pidl/parser.pm index 375558e5dc..8fb74b2e0e 100644 --- a/source4/build/pidl/parser.pm +++ b/source4/build/pidl/parser.pm @@ -288,14 +288,18 @@ sub CheckArraySizes($$) if (util::has_property($e, "size_is")) { my $size = find_size_var($e, util::array_size($e), $var_prefix); + pidl "\tif ($var_prefix$e->{NAME}) {\n"; check_null_pointer($size); - pidl "\tNDR_CHECK(ndr_check_array_size(ndr, (void*)&$var_prefix$e->{NAME}, $size));\n"; + pidl "\t\tNDR_CHECK(ndr_check_array_size(ndr, (void*)&$var_prefix$e->{NAME}, $size));\n"; + pidl "\t}\n"; } if (my $length = util::has_property($e, "length_is")) { $length = find_size_var($e, $length, $var_prefix); + pidl "\tif ($var_prefix$e->{NAME}) {\n"; check_null_pointer($length); - pidl "\tNDR_CHECK(ndr_check_array_length(ndr, (void*)&$var_prefix$e->{NAME}, $length));\n"; + pidl "\t\tNDR_CHECK(ndr_check_array_length(ndr, (void*)&$var_prefix$e->{NAME}, $length));\n"; + pidl "\t}\n"; } } diff --git a/source4/librpc/ndr/ndr.c b/source4/librpc/ndr/ndr.c index 7b55f4efb7..0543fbf0d3 100644 --- a/source4/librpc/ndr/ndr.c +++ b/source4/librpc/ndr/ndr.c @@ -700,12 +700,9 @@ uint32_t ndr_get_array_size(struct ndr_pull *ndr, const void *p) /* check the stored array size field */ -NTSTATUS ndr_check_array_size(struct ndr_pull *ndr, const void **p, uint32_t size) +NTSTATUS ndr_check_array_size(struct ndr_pull *ndr, void *p, uint32_t size) { - uint32 stored; - if (*p == NULL) { - return NT_STATUS_OK; - } + uint32_t stored; NDR_CHECK(ndr_token_retrieve(&ndr->array_size_list, p, &stored)); if (stored != size) { return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, @@ -744,9 +741,6 @@ uint32_t ndr_get_array_length(struct ndr_pull *ndr, const void *p) NTSTATUS ndr_check_array_length(struct ndr_pull *ndr, void *p, uint32_t length) { uint32_t stored; - if (*(void **)p == NULL) { - return NT_STATUS_OK; - } NDR_CHECK(ndr_token_retrieve(&ndr->array_length_list, p, &stored)); if (stored != length) { return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, -- cgit