Index: packet-ndps.c
===================================================================
RCS file: /cvsroot/ethereal/packet-ndps.c,v
retrieving revision 1.24
diff -u -r1.24 packet-ndps.c
--- packet-ndps.c	25 Aug 2003 21:59:18 -0000	1.24
+++ packet-ndps.c	17 Oct 2003 21:38:15 -0000
@@ -1843,6 +1843,7 @@
             foffset = ndps_string(tvb, hf_local_object_name, ndps_tree, foffset, NULL, 0);
             break;
     }
+    foffset += align_4(tvb, foffset);
     return foffset;
 }
 
@@ -2033,7 +2034,10 @@
             atree = proto_item_add_subtree(aitem, ett_ndps);
             length = tvb_get_ntohl(tvb, foffset);
             foffset += 4;
-            proto_tree_add_item(atree, hf_ndps_password, tvb, foffset, length, FALSE);
+            if (length!=0)
+            {
+                proto_tree_add_item(atree, hf_ndps_password, tvb, foffset, length, FALSE);
+            }
             proto_item_set_end(aitem, tvb, foffset);
             foffset += length;
         }
@@ -2041,7 +2045,10 @@
     case 1:
         length = tvb_get_ntohl(tvb, foffset);
         foffset += 4;
-        proto_tree_add_item(ndps_tree, hf_ndps_certified, tvb, foffset, length, FALSE);
+        if (length!=0)
+        {
+            proto_tree_add_item(ndps_tree, hf_ndps_certified, tvb, foffset, length, FALSE);
+        }
         foffset += length;
         break;
     case 2:
@@ -2169,7 +2176,10 @@
         atree = proto_item_add_subtree(aitem, ett_ndps);
         length = tvb_get_ntohl(tvb, foffset);
         foffset += 4;
-        proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+        if (length!=0)
+        {
+            proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+        }
         foffset += length;
         foffset += (length%2);
         proto_item_set_end(aitem, tvb, foffset);
@@ -2361,7 +2371,10 @@
         case 14:         /* Cardinal Seq */
             length = tvb_get_ntohl(tvb, foffset);
             foffset += 4;
-            proto_tree_add_item(ndps_tree, hf_info_int32, tvb, foffset, length, FALSE);
+            if (length!=0)
+            {
+                proto_tree_add_item(ndps_tree, hf_info_int32, tvb, foffset, length, FALSE);
+            }
             foffset += length;
             break;
         case 16:         /* Integer Range */
@@ -2599,11 +2612,15 @@
             foffset = qualifiedname(tvb, ndps_tree, foffset);
             length = tvb_get_ntohl(tvb, foffset);
             foffset += 4;
-            proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+            if (length!=0)
+            {
+                proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+            }
             foffset += length;
             proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, 4, FALSE);
             foffset += 4;
             foffset = name_or_id(tvb, ndps_tree, foffset);
+
             number_of_items = tvb_get_ntohl(tvb, foffset);
             proto_tree_add_uint(ndps_tree, hf_ndps_num_address_items, tvb, foffset, 4, number_of_items);
             foffset += 4;
@@ -2611,7 +2628,7 @@
             {
                 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 = address_item(tvb, atree, foffset);
                 proto_item_set_end(aitem, tvb, foffset);
             }
             number_of_items = tvb_get_ntohl(tvb, foffset);
@@ -2624,15 +2641,26 @@
                 proto_tree_add_item(atree, hf_ndps_event_type, tvb, foffset, 4, FALSE);
                 foffset += 4;
                 foffset = objectidentifier(tvb, atree, foffset);
+                foffset += align_4(tvb, foffset);
                 foffset = objectidentification(tvb, atree, foffset);
                 proto_tree_add_item(atree, hf_ndps_object_op, tvb, foffset, 4, FALSE);
                 foffset += 4;
-                
                 event_object_type = tvb_get_ntohl(tvb, foffset);
                 proto_tree_add_uint(atree, hf_ndps_event_object_identifier, tvb, foffset, 4, event_object_type);
                 foffset += 4;
                 switch (event_object_type)
                 {
+                    case 2:
+                        /* Number of Objects */
+                        number_of_items2 = tvb_get_ntohl(tvb, foffset);
+                        proto_tree_add_uint(atree, hf_ndps_num_objects, tvb, foffset, 4, number_of_items2);
+                        foffset += 4;
+                        for (j = 1 ; j <= number_of_items2; j++ )
+                        {
+                            foffset = objectidentifier(tvb, atree, foffset);
+                        }
+                        foffset += 4;
+                        break;
                     case 1:
                         foffset = objectidentifier(tvb, atree, foffset);
                         break;
@@ -2718,7 +2746,10 @@
                 atree = proto_item_add_subtree(aitem, ett_ndps);
                 length = tvb_get_ntohl(tvb, foffset);
                 foffset += 4;
-                proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+                if (length!=0)
+                {
+                    proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+                }
                 foffset += length;
                 foffset += (length%2);
                 proto_item_set_end(aitem, tvb, foffset);
@@ -2887,7 +2918,10 @@
             {
                 length = tvb_get_ntohl(tvb, foffset);
                 foffset += 4;
-                proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+                if (length!=0)
+                {
+                    proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+                }
                 foffset += length;
                 foffset += (length%2);
             }
@@ -3020,7 +3054,10 @@
                 atree = proto_item_add_subtree(aitem, ett_ndps);
                 length = tvb_get_ntohl(tvb, foffset);
                 foffset += 4;
-                proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+                if (length!=0)
+                {
+                    proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+                }
                 foffset += length;
                 foffset += (length%2);
             }
@@ -3033,7 +3070,10 @@
                 atree = proto_item_add_subtree(aitem, ett_ndps);
                 length = tvb_get_ntohl(tvb, foffset);
                 foffset += 4;
-                proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+                if (length!=0)
+                {
+                    proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+                }
                 foffset += length;
                 foffset += (length%2);
                 proto_item_set_end(aitem, tvb, foffset);
@@ -3084,7 +3124,10 @@
             foffset += 4;
             length = tvb_get_ntohl(tvb, foffset);
             foffset += 4;
-            proto_tree_add_item(ndps_tree, hf_ndps_add_bytes, tvb, foffset, 4, FALSE);
+            if (length!=0)
+            {
+                proto_tree_add_item(ndps_tree, hf_ndps_add_bytes, tvb, foffset, 4, FALSE);
+            }
             foffset += length;
             break;
         case 92:         /* XY Dimensions Value */
@@ -3237,19 +3280,28 @@
         case 106:         /* Octet String Pair */
             length = tvb_get_ntohl(tvb, foffset);
             foffset += 4;
-            proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+            if (length!=0)
+            {
+                proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+            }
             foffset += length;
             foffset += (length%2);
             length = tvb_get_ntohl(tvb, foffset);
             foffset += 4;
-            proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+            if (length!=0)
+            {
+                proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+            }
             foffset += length;
             foffset += (length%2);
             break;
         case 107:         /* Octet String Integer Pair */
             length = tvb_get_ntohl(tvb, foffset);
             foffset += 4;
-            proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+            if (length!=0)
+            {
+                proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+            }
             foffset += length;
             foffset += (length%2);
             proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, FALSE);
@@ -3265,7 +3317,10 @@
             foffset = qualifiedname(tvb, ndps_tree, foffset);
             length = tvb_get_ntohl(tvb, foffset);
             foffset += 4;
-            proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+            if (length!=0)
+            {
+                proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+            }
             foffset += length;
             foffset += (length%2);
             proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, 4, FALSE);
@@ -3284,7 +3339,10 @@
                 case 3:     /*OCTET_STRING*/
                     length = tvb_get_ntohl(tvb, foffset);
                     foffset += 4;
-                    proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+                    if (length!=0)
+                    {
+                        proto_tree_add_item(ndps_tree, hf_ndps_octet_string, tvb, foffset, length, FALSE);
+                    }
                     foffset += length;
                     foffset += (length%2);
                     break;
@@ -3990,7 +4048,10 @@
                 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);
-                proto_tree_add_uint(atree, hf_bind_security, tvb, foffset, 4, length);
+                if (length!=0)
+                {
+                    proto_tree_add_uint(atree, hf_bind_security, tvb, foffset, 4, length);
+                }
                 foffset += 4;
                 proto_item_set_end(aitem, tvb, foffset);
             }
@@ -4071,7 +4132,10 @@
                             proto_tree_add_item(btree, hf_ndps_data, tvb, foffset, -1, FALSE);
                             return;
                         }
-                        proto_tree_add_item(btree, hf_ndps_included_doc, tvb, foffset, length, FALSE);
+                        if (length!=0)
+                        {
+                            proto_tree_add_item(btree, hf_ndps_included_doc, tvb, foffset, length, FALSE);
+                        }
                         foffset += length;
                         foffset += (length%2);
                     }
@@ -4253,7 +4317,11 @@
             if (list_attr_op==0) /* Continuation */
             {
                 length = tvb_get_ntohl(tvb, foffset);
-                proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+                foffset += 4;
+                if (length!=0)
+                {
+                    proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+                }
                 foffset += length;
                 foffset += (length%2);
                 proto_tree_add_item(ndps_tree, hf_ndps_abort_flag, tvb, foffset, 4, FALSE);
@@ -4761,7 +4829,10 @@
                 atree = proto_item_add_subtree(aitem, ett_ndps);
                 length = tvb_get_ntohl(tvb, foffset);
                 foffset += 4;
-                proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+                if (length!=0)
+                {
+                    proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+                }
                 foffset += length;
                 proto_item_set_end(aitem, tvb, foffset);
             }
@@ -4844,7 +4915,11 @@
             else                                    /* Cont */
             {
                 length = tvb_get_ntohl(tvb, foffset);
-                proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+                foffset += 4;
+                if (length!=0)
+                {
+                    proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+                }
                 foffset += length;
                 foffset += (length%2);
                 proto_tree_add_item(ndps_tree, hf_ndps_abort_flag, tvb, foffset, 4, FALSE);
@@ -4887,7 +4962,10 @@
         case 0x00000022:    /* Map GUID to NDS Name */
             length = tvb_get_ntohl(tvb, foffset);
             foffset += 4;
-            proto_tree_add_item(ndps_tree, hf_ndps_guid, tvb, foffset, length, FALSE);
+            if (length!=0)
+            {
+                proto_tree_add_item(ndps_tree, hf_ndps_guid, tvb, foffset, length, FALSE);
+            }
             foffset += length;
             break;
         case 0x00000023:    /* AddEventProfile2 */
@@ -5004,7 +5082,11 @@
             else                                    /* Cont */
             {
                 length = tvb_get_ntohl(tvb, foffset);
-                proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+                foffset += 4;
+                if (length!=0)
+                {
+                    proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+                }
                 foffset += length;
                 foffset += (length%2);
                 proto_tree_add_item(ndps_tree, hf_ndps_abort_flag, tvb, foffset, 4, FALSE);
@@ -5031,7 +5113,10 @@
                 atree = proto_item_add_subtree(aitem, ett_ndps);
                 length = tvb_get_ntohl(tvb, foffset);
                 foffset += 4;
-                proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, FALSE);
+                if (length!=0)
+                {
+                    proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, FALSE);
+                }
                 proto_item_set_end(aitem, tvb, foffset);
             }
             break;
@@ -5053,7 +5138,10 @@
             {
                 length = tvb_get_ntohl(tvb, foffset);
                 foffset += 4;
-                proto_tree_add_item(atree, hf_ndps_item_bytes, tvb, foffset, length, FALSE);
+                if (length!=0)
+                {
+                    proto_tree_add_item(atree, hf_ndps_item_bytes, tvb, foffset, length, FALSE);
+                }
                 foffset += length;
             }
             proto_item_set_end(aitem, tvb, foffset);
@@ -5085,7 +5173,10 @@
                 atree = proto_item_add_subtree(aitem, ett_ndps);
                 length = tvb_get_ntohl(tvb, foffset);
                 foffset += 4;
-                proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, FALSE);
+                if (length!=0)
+                {
+                    proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, FALSE);
+                }
                 proto_item_set_end(aitem, tvb, foffset);
             }
             break;
@@ -5154,7 +5245,11 @@
             else
             {
                 length = tvb_get_ntohl(tvb, foffset);
-                proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+                foffset += 4;
+                if (length!=0)
+                {
+                    proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+                }
                 foffset += length;
                 foffset += (length%2);
                 proto_tree_add_item(ndps_tree, hf_ndps_abort_flag, tvb, foffset, 4, FALSE);
@@ -5180,7 +5275,10 @@
                 atree = proto_item_add_subtree(aitem, ett_ndps);
                 length = tvb_get_ntohl(tvb, foffset);
                 foffset += 4;
-                proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, FALSE);
+                if (length!=0)
+                {
+                    proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, FALSE);
+                }
                 proto_item_set_end(aitem, tvb, foffset);
             }
             break;
@@ -5227,7 +5325,10 @@
             proto_item_set_end(aitem, tvb, foffset);
             length = tvb_get_ntohl(tvb, foffset);
             foffset += 4;
-            proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+            if (length!=0)
+            {
+                proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+            }
             foffset += length;
             proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, 4, FALSE);
             foffset += 4;
@@ -5273,7 +5374,10 @@
                 atree = proto_item_add_subtree(aitem, ett_ndps);
                 length = tvb_get_ntohl(tvb, foffset);
                 foffset += 4;
-                proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+                if (length!=0)
+                {
+                    proto_tree_add_item(atree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+                }
                 foffset += length;
                 proto_item_set_end(aitem, tvb, foffset);
             }
@@ -5356,7 +5460,11 @@
             else                                    /* Cont */
             {
                 length = tvb_get_ntohl(tvb, foffset);
-                proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+                foffset += 4;
+                if (length!=0)
+                {
+                    proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+                }
                 foffset += length;
                 foffset += (length%2);
                 proto_tree_add_item(ndps_tree, hf_ndps_abort_flag, tvb, foffset, 4, FALSE);
@@ -5534,7 +5642,11 @@
                 break;
             case 1:       /* Continuation */
                 length = tvb_get_ntohl(tvb, foffset);
-                proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+                foffset += 4;
+                if (length!=0)
+                {
+                    proto_tree_add_item(ndps_tree, hf_ndps_context, tvb, foffset, length, FALSE);
+                }
                 foffset += length;
                 foffset += (length%2);
                 proto_tree_add_item(ndps_tree, hf_ndps_abort_flag, tvb, foffset, 4, FALSE);
@@ -5574,7 +5686,10 @@
                 atree = proto_item_add_subtree(aitem, ett_ndps);
                 length = tvb_get_ntohl(tvb, foffset);
                 foffset += 4;
-                proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, FALSE);
+                if (length!=0)
+                {
+                    proto_tree_add_item(atree, hf_bind_security, tvb, foffset, length, FALSE);
+                }
                 proto_item_set_end(aitem, tvb, foffset);
             }
             break;
@@ -5759,7 +5874,10 @@
                 btree = proto_item_add_subtree(bitem, ett_ndps);
                 length = tvb_get_ntohl(tvb, foffset);
                 foffset += 4;
-                proto_tree_add_item(btree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+                if (length!=0)
+                {
+                    proto_tree_add_item(btree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+                }
                 foffset += length;
                 proto_tree_add_item(btree, hf_ndps_event_type, tvb, foffset, 4, FALSE);
                 foffset += 4;
@@ -5813,7 +5931,10 @@
                 btree = proto_item_add_subtree(bitem, ett_ndps);
                 length = tvb_get_ntohl(tvb, foffset);
                 foffset += 4;
-                proto_tree_add_item(btree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+                if (length!=0)
+                {
+                    proto_tree_add_item(btree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+                }
                 foffset += length;
                 proto_tree_add_item(atree, hf_ndps_event_type, tvb, foffset, 4, FALSE);
                 foffset += 4;
@@ -6482,7 +6603,10 @@
         case 0x0000001d:    /* List Event Profiles */
             length = tvb_get_ntohl(tvb, foffset);
             foffset += 4;
-            proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+            if (length!=0)
+            {
+                proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+            }
             foffset += length;
             /* Start of Eventhandling */
             proto_tree_add_item(ndps_tree, hf_ndps_profile_id, tvb, foffset, 4, FALSE);
@@ -6494,7 +6618,10 @@
             foffset = qualifiedname(tvb, atree, foffset);
             length = tvb_get_ntohl(tvb, foffset);
             foffset += 4;
-            proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+            if (length!=0)
+            {
+                proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+            }
             foffset += length;
             proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, 4, FALSE);
             foffset += 4;
@@ -6522,7 +6649,10 @@
             /* End of Eventhandling */
             length = tvb_get_ntohl(tvb, foffset);
             foffset += 4;
-            proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
+            if (length!=0)
+            {
+                proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
+            }
             foffset += length;
             if(error_val != 0)
             {
@@ -6618,7 +6748,12 @@
                 foffset = ndps_string(tvb, hf_notify_printer_uri, atree, foffset, NULL, 0);
                 proto_item_set_end(aitem, tvb, foffset);
                 /* End of Eventhandling2 */
-                proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
+                length = tvb_get_ntohl(tvb, foffset); /* Added on 10-17-03 */
+                foffset += 4;
+                if (length!=0)
+                {
+                    proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
+                }
                 foffset += length;
                 if(error_val != 0)
                 {
@@ -6682,7 +6817,10 @@
                 atree = proto_item_add_subtree(aitem, ett_ndps);
                 length = tvb_get_ntohl(tvb, foffset);
                 foffset += 4;
-                proto_tree_add_item(atree, hf_ndps_attribute_set, tvb, foffset, length, FALSE);
+                if (length!=0)
+                {
+                    proto_tree_add_item(atree, hf_ndps_attribute_set, tvb, foffset, length, FALSE);
+                }
                 proto_item_set_end(aitem, tvb, foffset);
             }
             break;
@@ -6710,7 +6848,10 @@
             }
             length = tvb_get_ntohl(tvb, foffset);
             foffset += 4;
-            proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
+            if (length!=0)
+            {
+                proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
+            }
             foffset += length;
             foffset = return_code(tvb, pinfo, ndps_tree, foffset);
             break;
@@ -6728,7 +6869,10 @@
             }
             length = tvb_get_ntohl(tvb, foffset);
             foffset += 4;
-            proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
+            if (length!=0)
+            {
+                proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
+            }
             foffset += length;
             foffset = return_code(tvb, pinfo, ndps_tree, foffset);
             break;
@@ -6763,7 +6907,10 @@
                 atree = proto_item_add_subtree(aitem, ett_ndps);
                 length = tvb_get_ntohl(tvb, foffset);
                 foffset += 4;
-                proto_tree_add_item(atree, hf_ndps_attribute_set, tvb, foffset, length, FALSE);
+                if (length!=0)
+                {
+                    proto_tree_add_item(atree, hf_ndps_attribute_set, tvb, foffset, length, FALSE);
+                }
                 proto_item_set_end(aitem, tvb, foffset);
             }
             break;
@@ -6808,7 +6955,10 @@
             proto_item_set_end(aitem, tvb, foffset);
             length = tvb_get_ntohl(tvb, foffset);
             foffset += 4;
-            proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+            if (length!=0)
+            {
+                proto_tree_add_item(ndps_tree, hf_ndps_attribute_value, tvb, foffset, length, FALSE);
+            }
             foffset += length;
             proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, 4, FALSE);
             foffset += 4;
@@ -6836,7 +6986,10 @@
             /* End of ProfileResultSet */
             length = tvb_get_ntohl(tvb, foffset);
             foffset += 4;
-            proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
+            if (length!=0)
+            {
+                proto_tree_add_item(ndps_tree, hf_ndps_continuation_option, tvb, foffset, length, FALSE);
+            }
             foffset += length;
             foffset = return_code(tvb, pinfo, ndps_tree, foffset);
             break;
@@ -6844,7 +6997,10 @@
             /* Start of IntegerSeq */
             length = tvb_get_ntohl(tvb, foffset);
             foffset += 4;
-            proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, length, FALSE);
+            if (length!=0)
+            {
+                proto_tree_add_item(ndps_tree, hf_ndps_language_id, tvb, foffset, length, FALSE);
+            }
             foffset += length;
             /* End of IntegerSeq */
             foffset = return_code(tvb, pinfo, ndps_tree, foffset);
@@ -6940,7 +7096,10 @@
         case 0x00000001:    /* Bind */
             length = tvb_get_ntohl(tvb, foffset);
             foffset += 4;
-            proto_tree_add_item(ndps_tree, hf_ndps_attribute_set, tvb, foffset, length, FALSE);
+            if (length!=0)
+            {
+                proto_tree_add_item(ndps_tree, hf_ndps_attribute_set, tvb, foffset, length, FALSE);
+            }
             break;
         case 0x00000002:    /* Unbind */
             /* NoOp */
