r4139: 2nd attempt at fixing the null ptr in size_is() problem.
authorAndrew Tridgell <tridge@samba.org>
Fri, 10 Dec 2004 22:36:46 +0000 (22:36 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:06:30 +0000 (13:06 -0500)
(This used to be commit 3040cd65151dbcc54404f9be9d1fbcf539c7b635)

source4/build/pidl/parser.pm
source4/librpc/ndr/ndr.c

index 375558e5dc1a44fb5f0421fff11ba497496a78ac..8fb74b2e0ed882e7f650a7bdaa25ec6765f1f185 100644 (file)
@@ -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";
        }
 }
 
index 7b55f4efb7b3fc5222de413d958c76a8175312b6..0543fbf0d36125384e9162aff499750ac39c8d2e 100644 (file)
@@ -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,