Author: tpot
Date: 2005-01-18 06:50:47 +0000 (Tue, 18 Jan 2005)
New Revision: 187

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=lorikeet&rev=187

Log:
Handle arrays of structures that contain buffers properly.

Modified:
   trunk/ethereal/plugins/pidl/eparser.c


Changeset:
Modified: trunk/ethereal/plugins/pidl/eparser.c
===================================================================
--- trunk/ethereal/plugins/pidl/eparser.c       2005-01-18 05:33:05 UTC (rev 
186)
+++ trunk/ethereal/plugins/pidl/eparser.c       2005-01-18 06:50:47 UTC (rev 
187)
@@ -432,41 +432,39 @@
                        NTSTATUS (*pull_fn)(struct pidl_pull *, int, 
                                            pidl_tree *tree, void *))
 {
-       pidl_tree *subtrees;
-       char *p = base;
+       char *p = base, buf[255];
        uint32_t i;
 
-       subtrees = (pidl_tree *)g_malloc(sizeof(pidl_tree) * count);
-       memset(subtrees, 0, sizeof(pidl_tree) * count);
-
        if (!(ndr_flags & NDR_SCALARS)) goto buffers;
+
        for (i=0;i<count;i++) {
-               proto_item *item;
-               item = proto_tree_add_text(tree->proto_tree, ndr->tvb, 
ndr->offset, 0, "Array entry %d", i + 1);
-               subtrees[i].proto_tree = proto_item_add_subtree(item, 
ett_array);
 
-               if ((ndr_flags & (NDR_SCALARS|NDR_BUFFERS)) == 
(NDR_SCALARS|NDR_BUFFERS))
-                       pull_fn(ndr, NDR_SCALARS, &subtrees[i], p);
-               else
-                       pull_fn(ndr, NDR_SCALARS, tree, p);
+               snprintf(buf, sizeof(buf) - 1, "Array element %d", i + 1);
+               buf[sizeof(buf) - 1] = 0;
 
-               p += elsize;
+               pull_fn(ndr, NDR_SCALARS, 
+                       get_subtree(tree, buf, ndr, ett_array), p);
 
+               p += elsize;
        }
+
        if (!(ndr_flags & NDR_BUFFERS)) goto done;
+
 buffers:
        p = base;
+
        for (i=0;i<count;i++) {
-               if ((ndr_flags & (NDR_SCALARS|NDR_BUFFERS)) == 
(NDR_SCALARS|NDR_BUFFERS))
-                       pull_fn(ndr, NDR_BUFFERS, &subtrees[i], p);
-               else
-                       pull_fn(ndr, NDR_BUFFERS, tree, p);
 
+               snprintf(buf, sizeof(buf) - 1, "Array element %d", i + 1);
+               buf[sizeof(buf) - 1] = 0;
+
+               pull_fn(ndr, NDR_BUFFERS, 
+                       get_subtree(tree, buf, ndr, ett_array), p);
+
                p += elsize;
        }
- done: 
-       g_free(subtrees);
 
+done: 
        return NT_STATUS_OK;
 }
 

Reply via email to