#include <epan/reassemble.h>
#define NDPS_PACKET_INIT_COUNT 200
+/* Limit the number of items we can add to the tree. */
+#define NDPS_MAX_ITEMS 50
/* Tables for reassembly of fragments. */
static GHashTable *ndps_fragment_table = NULL;
static gboolean ndps_show_oids=FALSE;
/* Global Attribute for evaluation of Values */
-static char *global_attribute_name=NULL;
+static const char *global_attribute_name=NULL;
static void dissect_ndps_request(tvbuff_t*, packet_info*, proto_tree*, guint32, guint32, int);
objectidentifier(tvbuff_t* tvb, proto_tree *ndps_tree, int foffset)
{
guint32 length;
- char *label=NULL;
+ const char *label=NULL;
guint32 label_value=0;
proto_tree *atree;
proto_item *aitem;
foffset += 1;
length = tvb_get_guint8(tvb, foffset);
foffset += 1;
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(atree, hf_ndps_oid, tvb, foffset, length, FALSE);
foffset += length;
}
{
if (!found)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
foffset += length;
}
else
foffset += 1;
length = tvb_get_guint8(tvb, foffset);
foffset += 1;
+ tvb_ensure_bytes_exist(tvb, foffset, length);
foffset += length;
}
}
global_attribute_name = label;
+ /* XXX - There's probably a better way to handle this */
+ if ((int) (foffset+(length%2)) < 0) {
+ THROW(ReportedBoundsError);
+ }
return foffset+(length%2);
}
proto_tree_add_item(ndps_tree, hf_ndps_net, tvb, foffset, 4, FALSE);
proto_tree_add_item(ndps_tree, hf_ndps_node, tvb, foffset+4, 6, FALSE);
proto_tree_add_item(ndps_tree, hf_ndps_socket, tvb, foffset+10, 2, FALSE);
+ tvb_ensure_bytes_exist(tvb, foffset, address_len);
foffset += address_len;
break;
case 0x00000001:
proto_tree_add_item(ndps_tree, hf_ndps_port, tvb, foffset, 2, FALSE);
address = tvb_get_letohl(tvb, foffset+2);
proto_tree_add_ipv4(ndps_tree, hf_ndps_ip, tvb, foffset+2, 4, address);
+ tvb_ensure_bytes_exist(tvb, foffset, address_len);
foffset += address_len;
break;
default:
+ tvb_ensure_bytes_exist(tvb, foffset, tvb_get_ntohl(tvb, foffset -4));
foffset += tvb_get_ntohl(tvb, foffset -4);
break;
}
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Password %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(atree, hf_ndps_password, tvb, foffset, length, FALSE);
}
proto_item_set_end(aitem, tvb, foffset);
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(ndps_tree, hf_ndps_certified, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Event %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
proto_tree_add_item(btree, hf_ndps_event_type, tvb, foffset, 4, FALSE);
foffset += 4;
for (j = 1 ; j <= number_of_items2; j++ )
{
+ if (j > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(btree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
citem = proto_tree_add_text(btree, tvb, foffset, -1, "Item %u", j);
ctree = proto_item_add_subtree(citem, ett_ndps);
foffset = objectidentifier(tvb, ctree, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Cardinal %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- if (length!=0)
+ if (length==4)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += (length%2);
+ if ((int) foffset <= 0)
+ THROW(ReportedBoundsError);
proto_item_set_end(aitem, tvb, foffset);
}
return foffset;
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Info %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
data_type = tvb_get_ntohl(tvb, foffset);
guint32 dimension;
guint32 location;
guint32 cardinal;
- char *label;
+ const char *label;
guint32 label_value;
proto_tree *atree;
proto_item *aitem;
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Item %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = name_or_id(tvb, atree, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Name %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = ndps_string(tvb, hf_object_name, atree, foffset, NULL, 0);
case 57: /* Job Priority */
case 72: /* Sides */
case 95: /* Enumeration */
- if (strcmp(global_attribute_name,"(Novell) Attribute PRINTER SECURITY LEVEL")==0)
+ if (global_attribute_name != NULL &&
+ strcmp(global_attribute_name,"(Novell) Attribute PRINTER SECURITY LEVEL")==0)
{
proto_tree_add_item(ndps_tree, hf_print_security, tvb, foffset, 4, FALSE);
foffset += 4;
case 14: /* Cardinal Seq */
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- if (length!=0)
+ if (length==4)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(ndps_tree, hf_info_int32, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Item %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
proto_tree_add_item(atree, hf_ndps_n64, tvb, foffset, 8, FALSE);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Object %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = objectidentifier(tvb, atree, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Name %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = ndps_string(tvb, hf_object_name, atree, foffset, NULL, 0);
proto_tree_add_item(ndps_tree, hf_ndps_ydimension_n64, tvb, foffset, 8, FALSE);
foffset += 8;
}
- proto_tree_add_item(ndps_tree, hf_ndps_dim_flag, tvb, foffset, 8, FALSE);
+ proto_tree_add_item(ndps_tree, hf_ndps_dim_flag, tvb, foffset, 4, FALSE);
foffset += 4;
proto_tree_add_item(ndps_tree, hf_ndps_n64, tvb, foffset, 8, FALSE);
foffset += 8;
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Location %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
proto_tree_add_item(atree, hf_ndps_n64, tvb, foffset, 8, FALSE);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Area %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
proto_tree_add_item(atree, hf_ndps_xmin_n64, tvb, foffset, 8, FALSE);
foffset = qualifiedname(tvb, ndps_tree, foffset);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- if (length!=0)
+ if (length==4)
{
proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
}
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Address Item %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = address_item(tvb, atree, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Event %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
proto_tree_add_item(atree, hf_ndps_event_type, tvb, foffset, 4, FALSE);
foffset += 4;
for (j = 1 ; j <= number_of_items2; j++ )
{
+ if (j > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
foffset = objectidentifier(tvb, atree, foffset);
}
foffset += 4;
foffset += 4;
for (j = 1 ; j <= number_of_items2; j++ )
{
+ if (j > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Object %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = objectidentifier(tvb, btree, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Job %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- if (length!=0)
+ if (length==4)
{
proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += (length%2);
+ if ((int) foffset <= 0)
+ THROW(ReportedBoundsError);
proto_item_set_end(aitem, tvb, foffset);
}
break;
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Ignored Attribute %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
ignored_type = tvb_get_ntohl(tvb, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Resource %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
resource_type = tvb_get_ntohl(tvb, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Page Select %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
proto_tree_add_item(atree, hf_ndps_page_flag, tvb, foffset, 4, FALSE);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Item %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
proto_tree_add_item(atree, hf_ndps_page_flag, tvb, foffset, 4, FALSE);
}
foffset += length;
foffset += (length%2);
+ if ((int) foffset <= 0)
+ THROW(ReportedBoundsError);
}
else
{
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Page Information %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
proto_tree_add_item(atree, hf_ndps_page_order, tvb, foffset, 4, FALSE);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Category %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- if (length!=0)
+ if (length==4)
{
proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += (length%2);
+ if ((int) foffset <= 0)
+ THROW(ReportedBoundsError);
}
number_of_items = tvb_get_ntohl(tvb, foffset);
proto_tree_add_uint(ndps_tree, hf_ndps_num_values, tvb, foffset, 4, number_of_items);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Value %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- if (length!=0)
+ if (length==4)
{
proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += (length%2);
+ if ((int) foffset <= 0)
+ THROW(ReportedBoundsError);
proto_item_set_end(aitem, tvb, foffset);
}
break;
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Name %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = qualifiedname(tvb, atree, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Colorant %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = name_or_id(tvb, atree, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Printer %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = ndps_string(tvb, hf_ndps_printer_type, atree, foffset, NULL, 0);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Object %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = ndps_string(tvb, hf_ndps_pa_name, atree, foffset, NULL, 0);
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += (length%2);
+ if ((int) foffset <= 0)
+ THROW(ReportedBoundsError);
break;
case 107: /* Octet String Integer Pair */
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += (length%2);
+ if ((int) foffset <= 0)
+ THROW(ReportedBoundsError);
break;
case 4: /*DIST_NAME_STRING*/
foffset = ndps_string(tvb, hf_object_name, ndps_tree, foffset, NULL, 0);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Event %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = ndps_string(tvb, hf_object_name, atree, foffset, NULL, 0);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Object %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = objectidentifier(tvb, atree, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Argument %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = attribute_value(tvb, atree, foffset);
/* Get request value data */
request_value = p_get_proto_data(pinfo->fd, proto_ndps);
}
+ if (!request_value)
+ {
+ /* Can't find the original request packet so this is not any fragment packet */
+ dissect_ndps(tvb, pinfo, tree);
+ return;
+ }
/* Check to see of this is a fragment. If so then mark as a fragment. */
if (!spx_info->eom) {
request_value->ndps_frag = TRUE;
/* Is this the last fragment? EOM will indicate */
if (fd_head->next != NULL && spx_info->eom)
{
+ proto_item *frag_tree_item;
+
next_tvb = tvb_new_real_data(fd_head->data,
fd_head->len, fd_head->len);
tvb_set_child_real_data_tvbuff(tvb,
show_fragment_seq_tree(fd_head,
&ndps_frag_items,
tree, pinfo,
- next_tvb);
+ next_tvb, &frag_tree_item);
tid++;
}
/* Remember this fragment number so we can dissect again */
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Security %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
- if (length!=0)
+ if (length==4)
{
proto_tree_add_uint(atree, hf_bind_security, tvb, foffset, 4, length);
}
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Attribute %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = objectidentifier(tvb, btree, foffset);
foffset += 4;
for (j = 1 ; j <= number_of_items2; j++ )
{
+ if (j > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(btree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
citem = proto_tree_add_text(btree, tvb, foffset, -1, "Value %u", j);
ctree = proto_item_add_subtree(citem, ett_ndps);
foffset = attribute_value(tvb, ctree, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Type %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = objectidentifier(tvb, btree, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Value %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
if (doc_content==0)
proto_tree_add_item(btree, hf_ndps_data, tvb, foffset, -1, FALSE);
return;
}
- if (length!=0)
+ if (length==4)
{
proto_tree_add_item(btree, hf_ndps_included_doc, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += (length%2);
+ if ((int) foffset <= 0)
+ THROW(ReportedBoundsError);
}
else
{
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Attribute %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = objectidentifier(tvb, btree, foffset);
foffset += 4;
for (j = 1 ; j <= number_of_items2; j++ )
{
+ if (j > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(btree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
citem = proto_tree_add_text(btree, tvb, foffset, -1, "Value %u", j);
ctree = proto_item_add_subtree(citem, ett_ndps);
foffset = attribute_value(tvb, ctree, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Attribute %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = attribute_value(tvb, btree, foffset); /* Document Attributes */
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Method %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = objectidentifier(tvb, btree, foffset); /* Transfer Method */
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Type %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = objectidentifier(tvb, btree, foffset); /* Document Type */
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Attribute %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = attribute_value(tvb, btree, foffset); /* Document Attributes */
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Modification %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = attribute_value(tvb, btree, foffset); /* Job Modifications */
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Modification %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = attribute_value(tvb, btree, foffset); /* Document Modifications */
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Attribute %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = attribute_value(tvb, atree, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Option %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = objectidentification(tvb, btree, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
foffset = filteritem(tvb, ndps_tree, foffset);
}
proto_item_set_end(aitem, tvb, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Attribute %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = objectidentifier(tvb, btree, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Attribute %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = attribute_value(tvb, btree, foffset); /* Object Attribute Set */
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
/* Start of NWDPPrtContainedObjectId */
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Job ID");
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset += 4;
for (j = 1 ; j <= number_of_items2; j++ )
{
+ if (j > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(btree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
citem = proto_tree_add_text(btree, tvb, foffset, -1, "Attribute %u", j);
ctree = proto_item_add_subtree(citem, ett_ndps);
foffset = attribute_value(tvb, ctree, foffset); /* Object Attribute Set */
foffset += 4;
for (j = 1 ; j <= number_of_items2; j++ )
{
+ if (j > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(btree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
citem = proto_tree_add_text(btree, tvb, foffset, -1, "Attribute %u", j);
ctree = proto_item_add_subtree(citem, ett_ndps);
foffset = attribute_value(tvb, ctree, foffset); /* Object Attribute Set */
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Modification %d", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = attribute_value(tvb, btree, foffset); /* Object Attribute Set */
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Address %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = address_item(tvb, btree, foffset);
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- if (length!=0)
+ if (length==4)
{
proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
}
+ tvb_ensure_bytes_exist(tvb, foffset, length);
foffset += length;
proto_item_set_end(aitem, tvb, foffset);
}
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(ndps_tree, hf_ndps_guid, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Address %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = address_item(tvb, btree, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Attribute %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = objectidentifier(tvb, btree, foffset);
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Security %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- if (length!=0)
+ if (length==4)
{
proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, FALSE);
}
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(atree, hf_ndps_item_bytes, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Security %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- if (length!=0)
+ if (length==4)
{
proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, FALSE);
}
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Entry %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = server_entry(tvb, btree, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Entry %u", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = server_entry(tvb, btree, foffset);
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Security %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- if (length!=0)
+ if (length==4)
{
proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, FALSE);
}
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Supplier Alias %u", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = qualifiedname(tvb, atree, foffset);
proto_item_set_end(aitem, tvb, foffset);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- if (length!=0)
+ if (length==4)
{
proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
}
atree = proto_item_add_subtree(aitem, ett_ndps);
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Address %d", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = address_item(tvb, btree, foffset);
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- if (length!=0)
+ if (length==4)
{
proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
}
+ tvb_ensure_bytes_exist(tvb, foffset, length);
foffset += length;
proto_item_set_end(aitem, tvb, foffset);
}
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
}
foffset += length;
atree = proto_item_add_subtree(aitem, ett_ndps);
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Item %d", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
/* Start of ReportEventItem */
ctree = proto_item_add_subtree(citem, ett_ndps);
for (j = 1 ; j <= number_of_items; j++ )
{
+ if (j > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ctree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
ditem = proto_tree_add_text(ctree, tvb, foffset, -1, "Modification %d", j);
dtree = proto_item_add_subtree(ditem, ett_ndps);
foffset = attribute_value(tvb, dtree, foffset); /* Object Attribute Set */
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Destination %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
/* Start of Destination */
atree = proto_item_add_subtree(aitem, ett_ndps);
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Attribute %d", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = attribute_value(tvb, btree, foffset);
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Security %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- if (length!=0)
+ if (length==4)
{
proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, FALSE);
}
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Item %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
length=tvb_get_ntohl(tvb, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Item %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
proto_tree_add_item(atree, hf_ndps_session, tvb, foffset, 4, FALSE);
btree = proto_item_add_subtree(bitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- if (length!=0)
+ if (length==4)
{
proto_tree_add_item(btree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
}
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Object %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
proto_tree_add_item(atree, hf_ndps_session, tvb, foffset, 4, FALSE);
btree = proto_item_add_subtree(bitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- if (length!=0)
+ if (length==4)
{
proto_tree_add_item(btree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
}
btree = proto_item_add_subtree(bitem, ett_ndps);
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(btree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
foffset = attribute_value(tvb, btree, foffset);
}
proto_item_set_end(bitem, tvb, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Item %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
proto_tree_add_item(atree, hf_problem_type, tvb, foffset, 4, FALSE);
atree = proto_item_add_subtree(aitem, ett_ndps);
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Attribute %d", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = attribute_value(tvb, btree, foffset); /* Object Attribute Set */
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Option %d", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
length=tvb_get_ntohl(tvb, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Result %d", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = objectidentification(tvb, btree, foffset);
foffset += 4;
for (j = 1 ; j <= number_of_items2; j++ )
{
+ if (j > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(btree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
citem = proto_tree_add_text(btree, tvb, foffset, -1, "Attribute %d", j);
ctree = proto_item_add_subtree(citem, ett_ndps);
foffset = objectidentifier(tvb, ctree, foffset);
foffset += 4;
for (k = 1 ; k <= number_of_items3; k++ )
{
+ if (k > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ctree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
ditem = proto_tree_add_text(ctree, tvb, foffset, -1, "Value %d", k);
dtree = proto_item_add_subtree(ditem, ett_ndps);
foffset = attribute_value(tvb, dtree, foffset);
atree = proto_item_add_subtree(aitem, ett_ndps);
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Attribute %d", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = attribute_value(tvb, btree, foffset); /* Object Attribute Set */
atree = proto_item_add_subtree(aitem, ett_ndps);
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Job %d", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
/* Start of NWDPPrtContainedObjectId */
ctree = proto_item_add_subtree(citem, ett_ndps);
for (j = 1 ; j <= number_of_items2; j++ )
{
+ if (j > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ctree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
ditem = proto_tree_add_text(ctree, tvb, foffset, -1, "Object %d", j);
dtree = proto_item_add_subtree(ditem, ett_ndps);
foffset = attribute_value(tvb, dtree, foffset); /* Object Attribute Set */
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Object %d", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = attribute_value(tvb, btree, foffset); /* Object Attribute Set */
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Object %d", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = attribute_value(tvb, atree, foffset); /* Object Attribute Set */
case 0x0000001d: /* List Event Profiles */
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- if (length!=0)
+ if (length==4)
{
proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
}
foffset = qualifiedname(tvb, atree, foffset);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- if (length!=0)
+ if (length==4)
{
proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
}
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Address %d", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = address_item(tvb, btree, foffset);
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Event %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
/* Start of Eventhandling2 */
btree = proto_item_add_subtree(bitem, ett_ndps);
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(btree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
citem = proto_tree_add_text(btree, tvb, foffset, -1, "Address %d", i);
ctree = proto_item_add_subtree(citem, ett_ndps);
foffset = address_item(tvb, ctree, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(btree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
citem = proto_tree_add_text(btree, tvb, foffset, -1, "Attribute %d", i);
ctree = proto_item_add_subtree(citem, ett_ndps);
foffset = objectidentifier(tvb, ctree, foffset);
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Service %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
proto_tree_add_item(atree, hf_ndps_service_type, tvb, foffset, 4, FALSE);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Attribute %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(atree, hf_ndps_attribute_set, tvb, foffset, length, FALSE);
}
proto_item_set_end(aitem, tvb, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Item %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = server_entry(tvb, atree, foffset);
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_item(ndps_tree, hf_ndps_client_server_type, tvb, foffset, 4, FALSE);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset += 4;
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
}
foffset += length;
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Attribute %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(atree, hf_ndps_attribute_set, tvb, foffset, length, FALSE);
}
proto_item_set_end(aitem, tvb, foffset);
proto_item_set_end(aitem, tvb, foffset);
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- if (length!=0)
+ if (length==4)
{
proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
}
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Address %d", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = address_item(tvb, btree, foffset);
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
}
foffset += length;
/* Start of IntegerSeq */
length = tvb_get_ntohl(tvb, foffset);
foffset += 4;
- if (length!=0)
+ if (length==4)
{
proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, length, FALSE);
}
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
/* Start of DeliveryMethod */
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Method %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
atree = proto_item_add_subtree(aitem, ett_ndps);
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Address %d", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = address_item(tvb, btree, foffset);
foffset += 4;
if (length!=0)
{
+ tvb_ensure_bytes_exist(tvb, foffset, length);
proto_tree_add_item(ndps_tree, hf_ndps_attribute_set, tvb, foffset, length, FALSE);
}
break;
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Definition %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
if (tvb_get_ntohl(tvb, foffset)==0) { /* Offset for old type support */
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Banner %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = ndps_string(tvb, hf_ndps_banner_name, atree, foffset, NULL, 0);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Font %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = ndps_string(tvb, hf_font_type_name, atree, foffset, NULL, 0);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Font File %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = ndps_string(tvb, hf_font_file_name, atree, foffset, NULL, 0);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "File %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = ndps_string(tvb, hf_ndps_prn_file_name, atree, foffset, NULL, 0);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Definition %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = ndps_string(tvb, hf_ndps_prn_file_name, atree, foffset, NULL, 0);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Item %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = ndps_string(tvb, hf_ndps_def_file_name, atree, foffset, NULL, 0);
foffset += 4;
for (i = 1 ; i <= number_of_items2; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
foffset = ndps_string(tvb, hf_ndps_windows_key, btree, foffset, NULL, 0);
}
proto_item_set_end(bitem, tvb, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items2; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(btree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
foffset = ndps_string(tvb, hf_ndps_windows_key, btree, foffset, NULL, 0);
}
proto_item_set_end(bitem, tvb, foffset);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "OS %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
proto_tree_add_item(atree, hf_os_type, tvb, foffset, 4, FALSE);
foffset += 4;
for (i = 1 ; i <= number_of_items2; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Key %d", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
foffset = ndps_string(tvb, hf_ndps_windows_key, btree, foffset, NULL, 0);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Type %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
foffset = ndps_string(tvb, hf_ndps_printer_manuf, atree, foffset, NULL, 0);
foffset += 4;
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(ndps_tree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
aitem = proto_tree_add_text(ndps_tree, tvb, foffset, -1, "Language %d", i);
atree = proto_item_add_subtree(aitem, ett_ndps);
proto_tree_add_item(atree, hf_ndps_language_id, tvb, foffset, 4, FALSE);
atree = proto_item_add_subtree(aitem, ett_ndps);
for (i = 1 ; i <= number_of_items; i++ )
{
+ if (i > NDPS_MAX_ITEMS) {
+ proto_tree_add_text(atree, tvb, foffset, -1, "[Truncated]");
+ break;
+ }
bitem = proto_tree_add_text(atree, tvb, foffset, -1, "Item %d", i);
btree = proto_item_add_subtree(bitem, ett_ndps);
length=tvb_get_ntohl(tvb, foffset);
FT_UINT32, BASE_HEX, NULL, 0x0,
"Document Number", HFILL }},
+ { &hf_ndps_doc_content,
+ { "Document Content", "ndps.ndps_doc_content",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ "Document Content", HFILL }},
+
{ &hf_ndps_nameorid,
{ "Name or ID Type", "ndps.ndps_nameorid",
FT_UINT32, BASE_HEX, VALS(nameorid_enum), 0x0,