Ethereal-dev: Re: [ethereal-dev] Ethereal segfault
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Guy Harris <gharris@xxxxxxxxxxxx>
Date: Mon, 6 Mar 2000 11:40:38 -0800
> Ethereal 0.8.4 dumps core on the attached capture file. It's a small
> capture of a IPP request and answer on the lo interface.
I've attached a patch.
(The problem was a call to "proto_tree_add_text()" with an argument list
that didn't match the format; GCC didn't catch that because
"proto_tree_add_text()" wasn't, when compiled with GCC, declared with an
"__attribute__((format (printf, ...))" clause - doing that is tricky, as
"_proto_tree_add_item_value()"'s first "varargs" argument is *not* a
format string, so I'll have to look into seeing if that can be done,
i.e. if the first argument number in said clause has to refer to a
declared argument.
Tweaking the header to do such a declaration, in a fashion that might
not generate the right code, caught a whole *bunch* of invalid calls,
which I've been working on fixing.)
By the way, mail to you bounced with:
<han.holl@xxxxxxxxxxx>:
131.211.16.32 does not like recipient.
Remote host said: 550 <han.holl@xxxxxxxxxxx>: Recipient address rejected:
Relay access denied
Giving up.
"131.211.16.32" is "mail2.sig.nl", which claims to be the preference-5
mail exchanger for "prismant.nl":
% nslookup
Default Server: ns.above.net
Address: 207.126.96.162
> set type=any
> server ns.accu.uu.nl
Default Server: ns.accu.uu.nl
Address: 131.211.16.32
> prismant.nl.
Server: ns.accu.uu.nl
Address: 131.211.16.32
prismant.nl preference = 5, mail exchanger = mail2.sig.nl
prismant.nl preference = 10, mail exchanger = mail.accu.uu.nl
...
so either your DNS records are wrong, or "mail2.sig.nl" is
misconfigured, as if it's going to be a mail exchanger, it has to
support mail relaying....
Index: packet-ipp.c
===================================================================
RCS file: /usr/local/cvsroot/ethereal/packet-ipp.c,v
retrieving revision 1.4
diff -c -r1.4 packet-ipp.c
*** packet-ipp.c 2000/01/22 06:22:13 1.4
--- packet-ipp.c 2000/03/06 19:24:40
***************
*** 144,162 ****
static int parse_attributes(const u_char *pd, int offset, frame_data *fd,
proto_tree *tree);
static proto_tree *add_integer_tree(proto_tree *tree, const u_char *pd,
! int offset, guint name_length, guint value_length);
static void add_integer_value(guint tag, gchar *tag_desc, proto_tree *tree,
const u_char *pd, int offset, guint name_length, guint value_length);
static proto_tree *add_octetstring_tree(proto_tree *tree, const u_char *pd,
! int offset, guint name_length, guint value_length);
static void add_octetstring_value(guint tag, gchar *tag_desc, proto_tree *tree,
const u_char *pd, int offset, guint name_length, guint value_length);
static proto_tree *add_charstring_tree(proto_tree *tree, const u_char *pd,
! int offset, guint name_length, guint value_length);
static void add_charstring_value(guint tag, gchar *tag_desc, proto_tree *tree,
! const u_char *pd, int offset, guint name_length, guint value_length);
static int add_value_head(guint tag, gchar *tag_desc, proto_tree *tree,
! const u_char *pd, int offset, guint name_length, guint value_length);
void dissect_ipp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
{
--- 144,162 ----
static int parse_attributes(const u_char *pd, int offset, frame_data *fd,
proto_tree *tree);
static proto_tree *add_integer_tree(proto_tree *tree, const u_char *pd,
! int offset, int name_length, guint value_length);
static void add_integer_value(guint tag, gchar *tag_desc, proto_tree *tree,
const u_char *pd, int offset, guint name_length, guint value_length);
static proto_tree *add_octetstring_tree(proto_tree *tree, const u_char *pd,
! int offset, int name_length, guint value_length);
static void add_octetstring_value(guint tag, gchar *tag_desc, proto_tree *tree,
const u_char *pd, int offset, guint name_length, guint value_length);
static proto_tree *add_charstring_tree(proto_tree *tree, const u_char *pd,
! int offset, int name_length, guint value_length);
static void add_charstring_value(guint tag, gchar *tag_desc, proto_tree *tree,
! const u_char *pd, int offset, int name_length, guint value_length);
static int add_value_head(guint tag, gchar *tag_desc, proto_tree *tree,
! const u_char *pd, int offset, int name_length, guint value_length);
void dissect_ipp(const u_char *pd, int offset, frame_data *fd, proto_tree *tree)
{
***************
*** 453,459 ****
static proto_tree *
add_integer_tree(proto_tree *tree, const u_char *pd, int offset,
! guint name_length, guint value_length)
{
proto_item *ti;
--- 453,459 ----
static proto_tree *
add_integer_tree(proto_tree *tree, const u_char *pd, int offset,
! int name_length, guint value_length)
{
proto_item *ti;
***************
*** 487,493 ****
static proto_tree *
add_octetstring_tree(proto_tree *tree, const u_char *pd, int offset,
! guint name_length, guint value_length)
{
proto_item *ti;
--- 487,493 ----
static proto_tree *
add_octetstring_tree(proto_tree *tree, const u_char *pd, int offset,
! int name_length, guint value_length)
{
proto_item *ti;
***************
*** 495,502 ****
1 + 2 + name_length + 2 + value_length,
"%.*s: %s",
name_length,
! &pd[offset + 1 + 2]);
! bytes_to_str(&pd[offset + 1 + 2 + name_length + 2], value_length);
return proto_item_add_subtree(ti, ett_ipp_attr);
}
--- 495,502 ----
1 + 2 + name_length + 2 + value_length,
"%.*s: %s",
name_length,
! &pd[offset + 1 + 2],
! bytes_to_str(&pd[offset + 1 + 2 + name_length + 2], value_length));
return proto_item_add_subtree(ti, ett_ipp_attr);
}
***************
*** 512,518 ****
static proto_tree *
add_charstring_tree(proto_tree *tree, const u_char *pd, int offset,
! guint name_length, guint value_length)
{
proto_item *ti;
--- 512,518 ----
static proto_tree *
add_charstring_tree(proto_tree *tree, const u_char *pd, int offset,
! int name_length, guint value_length)
{
proto_item *ti;
***************
*** 526,532 ****
static void
add_charstring_value(guint tag, gchar *tag_desc, proto_tree *tree,
! const u_char *pd, int offset, guint name_length, guint value_length)
{
offset = add_value_head(tag, tag_desc, tree, pd, offset,
name_length, value_length);
--- 526,532 ----
static void
add_charstring_value(guint tag, gchar *tag_desc, proto_tree *tree,
! const u_char *pd, int offset, int name_length, guint value_length)
{
offset = add_value_head(tag, tag_desc, tree, pd, offset,
name_length, value_length);
***************
*** 536,542 ****
static int
add_value_head(guint tag, gchar *tag_desc, proto_tree *tree,
! const u_char *pd, int offset, guint name_length, guint value_length)
{
proto_tree_add_text(tree, offset, 1, "Tag: %s", tag_desc);
offset += 1;
--- 536,542 ----
static int
add_value_head(guint tag, gchar *tag_desc, proto_tree *tree,
! const u_char *pd, int offset, int name_length, guint value_length)
{
proto_tree_add_text(tree, offset, 1, "Tag: %s", tag_desc);
offset += 1;
- Follow-Ups:
- Re: [ethereal-dev] Ethereal segfault
- From: Guy Harris
- Re: [ethereal-dev] Ethereal segfault
- References:
- [ethereal-dev] Ethereal segfault
- From: Han Holl
- [ethereal-dev] Ethereal segfault
- Prev by Date: Re: [han.holl@xxxxxxxxxxx: Re: [ethereal-dev] Ethereal segfault]
- Next by Date: Re: [ethereal-dev] Ethereal segfault
- Previous by thread: [ethereal-dev] Ethereal segfault
- Next by thread: Re: [ethereal-dev] Ethereal segfault
- Index(es):





