r22576: Fix marshalling bug in aliasmem.
authorJeremy Allison <jra@samba.org>
Sun, 29 Apr 2007 20:57:04 +0000 (20:57 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:19:45 +0000 (12:19 -0500)
Jeremy.

source/rpc_parse/parse_samr.c

index 18d1a66e71b907278d90a04c238f7008f383a3fe..9beefbc0c016b42cf2b9699c16aa27663369e682 100644 (file)
@@ -4834,9 +4834,15 @@ BOOL samr_io_r_query_aliasmem(const char *desc, SAMR_R_QUERY_ALIASMEM * r_u,
                if(!prs_uint32("num_sids1", ps, depth, &r_u->num_sids1))
                        return False;
 
-               ptr_sid = TALLOC_ARRAY(ps->mem_ctx, uint32, r_u->num_sids1);
-               if (!ptr_sid) {
-                       return False;
+               if (UNMARSHALLING(ps)) {
+                       if (r_u->num_sids1) {
+                               ptr_sid = TALLOC_ARRAY(ps->mem_ctx, uint32, r_u->num_sids1);
+                               if (!ptr_sid) {
+                                       return False;
+                               }
+                       } else {
+                               ptr_sid = NULL;
+                       }
                }
                
                for (i = 0; i < r_u->num_sids1; i++) {
@@ -4846,7 +4852,14 @@ BOOL samr_io_r_query_aliasmem(const char *desc, SAMR_R_QUERY_ALIASMEM * r_u,
                }
                
                if (UNMARSHALLING(ps)) {
-                       r_u->sid = TALLOC_ARRAY(ps->mem_ctx, DOM_SID2, r_u->num_sids1);
+                       if (r_u->num_sids1) {
+                               r_u->sid = TALLOC_ARRAY(ps->mem_ctx, DOM_SID2, r_u->num_sids1);
+                               if (!r_u->sid) {
+                                       return False;
+                               }
+                       } else {
+                               r_u->sid = NULL;
+                       }
                }
                
                for (i = 0; i < r_u->num_sids1; i++) {