Add BASE_ALLOW_ZERO for byte arrays that are validly zero sized.
authorMichael Mann <mmann78@netscape.net>
Sun, 29 Nov 2015 00:13:59 +0000 (00:13 +0000)
committerMichael Mann <mmann78@netscape.net>
Mon, 30 Nov 2015 18:28:10 +0000 (18:28 +0000)
<MISSING> implies that the field should be there and isn't.  Allow dissectors to specify when a zero-sized array for a field is perfectly valid.

Ping-Bug: 11803
Change-Id: I3fd60e3c6f832c6b4a3a8837ebc52c3e74e795ae
Reviewed-on: https://code.wireshark.org/review/12271
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Reviewed-by: João Valverde <j@v6e.pt>
Reviewed-by: Michael Mann <mmann78@netscape.net>
doc/README.dissector
epan/dissectors/packet-ipv6.c
epan/ftypes/ftype-bytes.c
epan/proto.c
epan/proto.h

index 0adf1ca9519a3c6ecb453aabf826b3c917e7efd6..11acb0507ef1d19228a07afef8473f47c2c17045 100644 (file)
@@ -141,6 +141,7 @@ FIELDDISPLAY    --For FT_UINT{8,16,24,32,40,48,56,64} and
                   SEP_DOT, SEP_DASH, SEP_COLON, or SEP_SPACE to provide
                   a separator between bytes.
                   BASE_NONE has no separator between bytes
+                  BASE_ALLOW_ZERO displays <none> instead of <MISSING> for zero sized byte array
 
                 --For FT_IPv4:
 
index 8d992cae3683e08ff832ee478c61790bde504a14..f778e090d5b6a571b2ea9424a92517528db7fb14 100644 (file)
@@ -2744,7 +2744,7 @@ proto_register_ipv6(void)
         },
         { &hf_ipv6_opt_padn,
             { "PadN", "ipv6.opt.padn",
-                FT_BYTES, BASE_NONE, NULL, 0x0,
+                FT_BYTES, BASE_NONE|BASE_ALLOW_ZERO, NULL, 0x0,
                 "PadN Option", HFILL }
         },
         { &hf_ipv6_opt_rtalert,
index 008772b7cf41d646d6d4043cc0dd3955ee1b8d01..0733681dd237bb89924218e89f70995da6674463 100644 (file)
@@ -142,7 +142,7 @@ bytes_to_repr(fvalue_t *fv, ftrepr_t rtype, int field_display, char *buf)
 {
        char separator;
 
-       switch(field_display)
+       switch(FIELD_DISPLAY(field_display))
        {
        case SEP_DOT:
                separator = '.';
index 0fe4b320c7836f0b2a3c1ba1f7027a22efda7468..28d3677f5edfb2225e7303191ffcd7a8bd97e153 100644 (file)
@@ -4635,7 +4635,11 @@ proto_custom_set(proto_tree* tree, GSList *field_ids, gint occurrence,
                                                        wmem_free(NULL, str);
                                                }
                                                else {
-                                                       offset_r += protoo_strlcpy(result+offset_r, "<MISSING>", size-offset_r);
+                                                       if (hfinfo->display & BASE_ALLOW_ZERO) {
+                                                               offset_r += protoo_strlcpy(result+offset_r, "<none>", size-offset_r);
+                                                       } else {
+                                                               offset_r += protoo_strlcpy(result+offset_r, "<MISSING>", size-offset_r);
+                                                       }
                                                }
                                                break;
 
@@ -6631,7 +6635,11 @@ proto_item_fill_label(field_info *fi, gchar *label_str)
                                label_fill(label_str, 0, hfinfo, str);
                                wmem_free(NULL, str);
                        } else {
-                               label_fill(label_str, 0, hfinfo, "<MISSING>");
+                               if (hfinfo->display & BASE_ALLOW_ZERO) {
+                                       label_fill(label_str, 0, hfinfo, "<none>");
+                               } else {
+                                       label_fill(label_str, 0, hfinfo, "<MISSING>");
+                               }
                        }
                        break;
 
index c5e840237a2e64a43ee0aad2c6b0678ac32ac6be..c6ce7ede216a7eae07ee6824b78aff7b2b43696e 100644 (file)
@@ -538,6 +538,7 @@ typedef enum {
 #define BASE_RANGE_STRING 0x100
 #define BASE_EXT_STRING   0x200
 #define BASE_VAL64_STRING 0x400
+#define BASE_ALLOW_ZERO   0x800  /**< Display <none> instead of <MISSING> for zero sized byte array */
 
 /** BASE_ values that cause the field value to be displayed twice */
 #define IS_BASE_DUAL(b) ((b)==BASE_DEC_HEX||(b)==BASE_HEX_DEC)