Ethereal-dev: Re: [Ethereal-dev] Possible etherreal bug
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Guy Harris <gharris@xxxxxxxxx>
Date: Tue, 15 Jan 2002 02:13:52 -0800
On Mon, Jan 14, 2002 at 06:37:25PM +0900, Sapariya Manish wrote: > I dont know whether this is the correct place to report/discuss a bug, It is; see the "How to Report a Bug" section of the README file in the Ethereal source tree. > I am working on BGP4 and have one capture file which I think ethereal > is not interpreting properly. Yes, there's a bug in the BGP dissector; I've checked in a fix. I've attached to this mail a patch for the change I checked in.
Index: packet-bgp.c
===================================================================
RCS file: /usr/local/cvsroot/ethereal/packet-bgp.c,v
retrieving revision 1.50
diff -c -r1.50 packet-bgp.c
*** packet-bgp.c 2001/12/10 00:25:26 1.50
--- packet-bgp.c 2002/01/15 10:11:49
***************
*** 840,849 ****
"bytes");
break;
case BGPTYPE_AS_PATH:
! /* (o + i + 3) =
! (o + current attribute + 3 bytes to first tuple) */
! end = o + alen + i + 3;
! q = o + i + 3;
/* must be freed by second switch! */
/* "alen * 6" (5 digits + space) should be a good estimate
of how long the AS path string could be */
--- 840,849 ----
"bytes");
break;
case BGPTYPE_AS_PATH:
! /* (o + i + aoff) =
! (o + current attribute + aoff bytes to first tuple) */
! q = o + i + aoff;
! end = q + alen;
/* must be freed by second switch! */
/* "alen * 6" (5 digits + space) should be a good estimate
of how long the AS path string could be */
***************
*** 950,959 ****
if (alen % 4 != 0)
goto default_attribute_top;
! /* (o + i + 3) =
! (o + current attribute + 3 bytes to first tuple) */
! end = o + alen + i + 3;
! q = o + i + 3;
/* must be freed by second switch! */
/* "alen * 12" (5 digits, a :, 5 digits + space ) should be
a good estimate of how long the communities string could
--- 950,959 ----
if (alen % 4 != 0)
goto default_attribute_top;
! /* (o + i + aoff) =
! (o + current attribute + aoff bytes to first tuple) */
! q = o + i + aoff;
! end = q + alen;
/* must be freed by second switch! */
/* "alen * 12" (5 digits, a :, 5 digits + space ) should be
a good estimate of how long the communities string could
***************
*** 1004,1013 ****
if (alen % 4 != 0)
goto default_attribute_top;
! /* (o + i + 3) =
! (o + current attribute + 3 bytes to first tuple) */
! end = o + alen + i + 3;
! q = o + i + 3;
/* must be freed by second switch! */
/* "alen * 16" (12 digits, 3 dots + space ) should be
a good estimate of how long the cluster_list string could
--- 1004,1013 ----
if (alen % 4 != 0)
goto default_attribute_top;
! /* (o + i + aoff) =
! (o + current attribute + aoff bytes to first tuple) */
! q = o + i + aoff;
! end = q + alen;
/* must be freed by second switch! */
/* "alen * 16" (12 digits, 3 dots + space ) should be
a good estimate of how long the cluster_list string could
***************
*** 1036,1060 ****
case BGPTYPE_EXTENDED_COMMUNITY:
if (alen %8 != 0)
goto default_attribute_top;
! q = o + i + aoff ;
! end = o + i + aoff + alen ;
! ext_com_str = malloc((alen / 8)*MAX_SIZE_OF_EXT_COM_NAMES) ;
! if (ext_com_str == NULL) break ;
! ext_com_str[0] = '\0' ;
while (q < end) {
! ext_com = tvb_get_ntohs(tvb,q) ;
snprintf(junk_buf, sizeof(junk_buf), "%s", val_to_str(ext_com,bgpext_com_type,"Unknown"));
! strncat(ext_com_str,junk_buf,sizeof(junk_buf));
! q = q + 8 ;
! if (q<end) strncat(ext_com_str,",",1);
}
ti = proto_tree_add_text(subtree,tvb,o+i,alen+aoff,
"%s : %s (%u %s)",
val_to_str(bgpa.bgpa_type,bgpattr_type,"Unknown"),
ext_com_str,
alen,
! (alen ==1 ) ? "byte" : "bytes");
! free(ext_com_str) ;
break;
default:
--- 1036,1063 ----
case BGPTYPE_EXTENDED_COMMUNITY:
if (alen %8 != 0)
goto default_attribute_top;
!
! /* (o + i + aoff) =
! (o + current attribute + aoff bytes to first tuple) */
! q = o + i + aoff;
! end = q + alen;
! ext_com_str = malloc((alen / 8)*MAX_SIZE_OF_EXT_COM_NAMES);
! if (ext_com_str == NULL) break;
! ext_com_str[0] = '\0';
while (q < end) {
! ext_com = tvb_get_ntohs(tvb, q);
snprintf(junk_buf, sizeof(junk_buf), "%s", val_to_str(ext_com,bgpext_com_type,"Unknown"));
! strncat(ext_com_str, junk_buf, sizeof(junk_buf));
! q = q + 8;
! if (q < end) strncat(ext_com_str, ",", 1);
}
ti = proto_tree_add_text(subtree,tvb,o+i,alen+aoff,
"%s : %s (%u %s)",
val_to_str(bgpa.bgpa_type,bgpattr_type,"Unknown"),
ext_com_str,
alen,
! (alen == 1) ? "byte" : "bytes");
! free(ext_com_str);
break;
default:
***************
*** 1152,1161 ****
"AS path: %s", as_path_str);
as_paths_tree = proto_item_add_subtree(ti, ett_bgp_as_paths);
! /* (o + i + 3) =
! (o + current attribute + 3 bytes to first tuple) */
! end = o + alen + i + 3;
><MANGLED_ON_PURPOSE.12810 ! q = o + i + 3;
/* snarf each AS path tuple, we have to step through each one
again to make a separate subtree so we can't just reuse
--- 1155,1164 ----
"AS path: %s", as_path_str);
as_paths_tree = proto_item_add_subtree(ti, ett_bgp_as_paths);
! /* (o + i + aoff) =
! (o + current attribute + aoff bytes to first tuple) */
! q = o + i + aoff;
! end = q + alen;
/* snarf each AS path tuple, we have to step through each one
again to make a separate subtree so we can't just reuse
***************
*** 1293,1302 ****
communities_tree = proto_item_add_subtree(ti,
ett_bgp_communities);
! /* (o + i + 3) =
! (o + current attribute + 3 bytes to first tuple) */
! end = o + alen + i + 3;
! q = o + i + 3;
/* snarf each community */
while (q < end) {
--- 1296,1305 ----
communities_tree = proto_item_add_subtree(ti,
ett_bgp_communities);
! /* (o + i + aoff) =
! (o + current attribute + aoff bytes to first tuple) */
! q = o + i + aoff;
! end = q + alen;
/* snarf each community */
while (q < end) {
***************
*** 1468,1477 ****
cluster_list_tree = proto_item_add_subtree(ti,
ett_bgp_cluster_list);
! /* (p + i + 3) =
! (p + current attribute + 3 bytes to first tuple) */
! end = o + alen + i + 3;
! q = o + i + 3;
/* snarf each cluster identifier */
while (q < end) {
--- 1471,1480 ----
cluster_list_tree = proto_item_add_subtree(ti,
ett_bgp_cluster_list);
><MANGLED_ON_PURPOSE.12811
! /* (o + i + aoff) =
! (o + current attribute + aoff bytes to first tuple) */
! q = o + i + aoff;
! end = q + alen;
/* snarf each cluster identifier */
while (q < end) {
This message has been 'sanitized'. This means that potentially
dangerous content has been rewritten or removed. The following
log describes which actions were taken.
Sanitizer (start="1011089639"):
Part (pos="1539"):
SanitizeFile (filename="unnamed.txt", mimetype="text/plain"):
Match (rule="2"):
Enforced policy: accept
Part (pos="2098"):
SanitizeFile (filename="patch", mimetype="text/plain"):
Match (rule="default"):
Enforced policy: accept
Split really long tag (over 2k):
>>_end) strncat(ext_com_str ... end = o + alen + i + 3;<<
Split really long tag (over 2k):
>>_MANGLED_ON_PURPOSE.12810 ... , ett_bgp_cluster_list);<<
Total modifications so far: 2
Anomy 0.0.0 : Sanitizer.pm
$Id: Sanitizer.pm,v 1.32 2001/10/11 19:27:15 bre Exp $
- References:
- [Ethereal-dev] Possible etherreal bug
- From: Sapariya Manish
- [Ethereal-dev] Possible etherreal bug
- Prev by Date: Re: [Ethereal-dev] nfs : patch to snoop fhandle to filenames
- Next by Date: [Ethereal-dev] Ethereal 0.9.0 fails to build on Solaris 8 IA32
- Previous by thread: [Ethereal-dev] Possible etherreal bug
- Next by thread: [Ethereal-dev] Ethereal 0.9.0 fails to build on Solaris 8 IA32
- Index(es):





