The padding of the last parameter is not included in the length of the chunk
authorMichael Tüxen <tuexen@fh-muenster.de>
Thu, 29 Nov 2012 18:09:51 +0000 (18:09 -0000)
committerMichael Tüxen <tuexen@fh-muenster.de>
Thu, 29 Nov 2012 18:09:51 +0000 (18:09 -0000)
as described in RFC 4960, section 3.2.

svn path=/trunk/; revision=46290

epan/dissectors/packet-sctp.c

index 4d9112d95982c338e41f662516722931098651b3..79249a8d444135df5906b3045b141cdfe97e04d2 100644 (file)
@@ -1472,10 +1472,17 @@ dissect_parameter(tvbuff_t *parameter_tvb, packet_info *pinfo,
 
   parameter_item = proto_tree_add_text(chunk_tree, parameter_tvb, PARAMETER_HEADER_OFFSET, tvb_reported_length(parameter_tvb), "%s parameter", val_to_str_const(type, parameter_identifier_values, "Unknown"));
   parameter_tree = proto_item_add_subtree(parameter_item, ett_sctp_chunk_parameter);
-  if (!final_parameter && (reported_length % 4)) {
-    expert_add_info_format(pinfo, parameter_item, PI_MALFORMED, PI_ERROR,
-                           "Parameter length is not padded to a multiple of 4 bytes (length=%d)",
-                           reported_length);
+  if (final_parameter) {
+    if (padding_length > 0) {
+      expert_add_info_format(pinfo, parameter_item, PI_MALFORMED, PI_ERROR,
+                             "The padding of this final parameter should be the padding of the chunk.");
+    }
+  } else {
+    if (reported_length % 4) {
+      expert_add_info_format(pinfo, parameter_item, PI_MALFORMED, PI_ERROR,
+                             "Parameter length is not padded to a multiple of 4 bytes (length=%d)",
+                             reported_length);
+    }
   }
 
   if (!(chunk_tree || (dissecting_init_init_ack_chunk && (type == IPV4ADDRESS_PARAMETER_ID || type == IPV6ADDRESS_PARAMETER_ID))))