Ethereal-dev: Re: [Ethereal-dev] Crash when using "Per packet information"

Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.

From: Guy Harris <guy@xxxxxxxxxxxx>
Date: Tue, 15 Apr 2003 03:03:01 -0700
On Tue, Apr 15, 2003 at 12:36:42PM +0300, Shaul Eizikovich wrote:
> I have been writing a new dissector where adjacent packets are grouped
> according to some accumulative data.
> To do so, I employed the p_add_proto_data() and p_get_proto_data() function
> pair.
> 
> In short:
> Crash when redissecting.
> Important data: I do not pass pinfo->fd, rather I pass pinfo->fd->prev as
> first parameter  of p_get_proto_data()
> 
> More detailed explanation:
> Every time the dissector is called it checks if a previous packet exists,
> if  it does then it gets my data structure that I have previously added.

As Ronnie Sahlberg noted, that's *NOT* the case if the previous packet
wasn't a packet for your new dissector's protocol.

> Then, my dissector data structure is malloc'd,  filled-in with data and
> stored using p_add_proto_data().

Presumably that's what's done if the attempt to get the data structure
returns a null pointer, meaning that the data structure *wasn't*
previously added.

> When I re-dissect an input file (e.g. Decode As ...) I usually get a crash
> that results from the following condition:
> pinfo->fd is OK,
> if (pinfo->fd->next)
>   next_packet = (my_packet *)p_get_proto_data(pinfo->fd->next,
> proto_myproto);

pinfo->fd->next, or pinfo->fd->prev?  You said pinfo->fd->prev earlier.