Ethereal-users: Re: [Ethereal-users] IPP attribute_fidelity decoding bug in Ethereal version 0.
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Guy Harris <guy@xxxxxxxxxx>
Date: Tue, 28 Jan 2003 14:07:09 -0800
On Tue, Jan 28, 2003 at 12:00:25PM -0800, Halsema, Aillil I wrote: > The ipp_attribute_fidelity attribute's value is an octet. Ethereal is > decoding it and complaining that the value length should be 4. This is > incorrect. The value length should be 1. I've checked in a change that should fix that; I've attached a patch in case you built from source the version of Ethereal you're running.
Index: packet-ipp.c
===================================================================
RCS file: /usr/local/cvsroot/ethereal/packet-ipp.c,v
retrieving revision 1.33
diff -c -r1.33 packet-ipp.c
*** packet-ipp.c 28 Aug 2002 21:00:17 -0000 1.33
--- packet-ipp.c 28 Jan 2003 22:01:43 -0000
***************
*** 140,148 ****
static int parse_attributes(tvbuff_t *tvb, int offset, proto_tree *tree);
static proto_tree *add_integer_tree(proto_tree *tree, tvbuff_t *tvb,
! int offset, int name_length, int value_length);
static void add_integer_value(gchar *tag_desc, proto_tree *tree,
! tvbuff_t *tvb, int offset, int name_length, int value_length);
static proto_tree *add_octetstring_tree(proto_tree *tree, tvbuff_t *tvb,
int offset, int name_length, int value_length);
static void add_octetstring_value(gchar *tag_desc, proto_tree *tree,
--- 140,148 ----
static int parse_attributes(tvbuff_t *tvb, int offset, proto_tree *tree);
static proto_tree *add_integer_tree(proto_tree *tree, tvbuff_t *tvb,
! int offset, int name_length, int value_length, guint8 tag);
static void add_integer_value(gchar *tag_desc, proto_tree *tree,
! tvbuff_t *tvb, int offset, int name_length, int value_length, guint8 tag);
static proto_tree *add_octetstring_tree(proto_tree *tree, tvbuff_t *tvb,
int offset, int name_length, int value_length);
static void add_octetstring_value(gchar *tag_desc, proto_tree *tree,
***************
*** 384,393 ****
*/
attr_tree = add_integer_tree(as_tree,
tvb, offset, name_length,
! value_length);
}
add_integer_value(tag_desc, attr_tree, tvb,
! offset, name_length, value_length);
break;
case TAG_TYPE_OCTETSTRING:
--- 384,393 ----
*/
attr_tree = add_integer_tree(as_tree,
tvb, offset, name_length,
! value_length, tag);
}
add_integer_value(tag_desc, attr_tree, tvb,
! offset, name_length, value_length, tag);
break;
case TAG_TYPE_OCTETSTRING:
***************
*** 427,465 ****
return offset;
}
static proto_tree *
add_integer_tree(proto_tree *tree, tvbuff_t *tvb, int offset,
! int name_length, int value_length)
{
proto_item *ti;
! if (value_length != 4) {
! ti = proto_tree_add_text(tree, tvb, offset,
! 1 + 2 + name_length + 2 + value_length,
! "%.*s: Invalid integer (length is %u, should be 4)",
! name_length,
! tvb_get_ptr(tvb, offset + 1 + 2, name_length),
! value_length);
! } else {
ti = proto_tree_add_text(tree, tvb, offset,
1 + 2 + name_length + 2 + value_length,
! "%.*s: %u",
name_length,
tvb_get_ptr(tvb, offset + 1 + 2, name_length),
! tvb_get_ntohl(tvb, offset + 1 + 2 + name_length + 2));
}
return proto_item_add_subtree(ti, ett_ipp_attr);
}
static void
add_integer_value(gchar *tag_desc, proto_tree *tree, tvbuff_t *tvb,
! int offset, int name_length, int value_length)
{
offset = add_value_head(tag_desc, tree, tvb, offset, name_length,
value_length);
! if (value_length == 4) {
! proto_tree_add_text(tree, tvb, offset, value_length,
! "Value: %u", tvb_get_ntohl(tvb, offset));
}
}
--- 427,525 ----
return offset;
}
+ static const value_string bool_vals[] = {
+ { 0x00, "false" },
+ { 0x01, "true" },
+ { 0, NULL }
+ };
+
static proto_tree *
add_integer_tree(proto_tree *tree, tvbuff_t *tvb, int offset,
! int name_length, int value_length, guint8 tag)
{
proto_item *ti;
+ guint8 bool_val;
! switch (tag) {
!
! case TAG_BOOLEAN:
! if (value_length != 1) {
! ti = proto_tree_add_text(tree, tvb, offset,
! 1 + 2 + name_length + 2 + value_length,
! "%.*s: Invalid boolean (length is %u, should be 1)",
! name_length,
! tvb_get_ptr(tvb, offset + 1 + 2, name_length),
! value_length);
! } else {
! bool_val = tvb_get_guint8(tvb,
! offset + 1 + 2 + name_length + 2);
! ti = proto_tree_add_text(tree, tvb, offset,
! 1 + 2 + name_length + 2 + value_length,
! "%.*s: %s",
! name_length,
! tvb_get_ptr(tvb, offset + 1 + 2, name_length),
! val_to_str(bool_val, bool_vals, "Unknown (0x%02x)"));
! }
! break;
!
! case TAG_INTEGER:
! case TAG_ENUM:
! if (value_length != 4) {
! ti = proto_tree_add_text(tree, tvb, offset,
! 1 + 2 + name_length + 2 + value_length,
! "%.*s: Invalid integer (length is %u, should be 4)",
! name_length,
! tvb_get_ptr(tvb, offset + 1 + 2, name_length),
! value_length);
! } else {
! ti = proto_tree_add_text(tree, tvb, offset,
! 1 + 2 + name_length + 2 + value_length,
! "%.*s: %u",
! name_length,
! tvb_get_ptr(tvb, offset + 1 + 2, name_length),
! tvb_get_ntohl(tvb, offset + 1 + 2 + name_length + 2));
! }
! break;
!
! default:
ti = proto_tree_add_text(tree, tvb, offset,
1 + 2 + name_length + 2 + value_length,
! "%.*s: Unknown integer type 0x%02x",
name_length,
tvb_get_ptr(tvb, offset + 1 + 2, name_length),
! tag);
! break;
}
return proto_item_add_subtree(ti, ett_ipp_attr);
}
static void
add_integer_value(gchar *tag_desc, proto_tree *tree, tvbuff_t *tvb,
! int offset, int name_length, int value_length, guint8 tag)
{
+ guint8 bool_val;
+
offset = add_value_head(tag_desc, tree, tvb, offset, name_length,
value_length);
!
! switch (tag) {
!
! case TAG_BOOLEAN:
! if (value_length == 1) {
! bool_val = tvb_get_guint8(tvb, offset);
! proto_tree_add_text(tree, tvb, offset, value_length,
! "Value: %s",
! val_to_str(bool_val, bool_vals, "Unknown (0x%02x)"));
! }
! break;
!
! case TAG_INTEGER:
! case TAG_ENUM:
! if (value_length == 4) {
! proto_tree_add_text(tree, tvb, offset, value_length,
! "Value: %u", tvb_get_ntohl(tvb, offset));
! }
! break;
}
}
- References:
- [Ethereal-users] IPP attribute_fidelity decoding bug in Ethereal version 0.9.9 (w indows)
- From: Halsema, Aillil I
- [Ethereal-users] IPP attribute_fidelity decoding bug in Ethereal version 0.9.9 (w indows)
- Prev by Date: [Ethereal-users] Slow Response
- Next by Date: Re: [Ethereal-users] Slow Response
- Previous by thread: [Ethereal-users] IPP attribute_fidelity decoding bug in Ethereal version 0.9.9 (w indows)
- Next by thread: [Ethereal-users] Slow Response
- Index(es):