Ethereal-dev: [Ethereal-dev] Re: [Ethereal-cvs] cvs commit: ethereal packet-dcerpc-spoolss.c

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

From: "Ronnie Sahlberg" <ronnie_sahlberg@xxxxxxxxxxxxxx>
Date: Mon, 11 Nov 2002 19:12:54 +1100
Hi

In your patch there are several places where you update
offset using
offset += x;

For example in dissect_DEVMODE()

This does not work if dissect_DEVMODE is called through a pointer.
You need to "protect" this by adding something like
    dcerpc_info *di = pinfo->private_data;

     if (di->conformant_run)
    		return offset;

To the beginning of the function.
(or by encapsulating the offset+=x; statement by
   if(!di->conformant_run){
        offset+=x;
    }
)


The reason for this is that in order for the dissectors in ethereal to be
able to handle
structures where a conformant array is embedded inside the structure it must
call the
structure dissector twice.
Once with conformant_run==1, where the only thing that is allowed to modify
offset are
the dissectors for conformant array headers, and one with conformant_run==0
where everything else is dissected.




----- Original Message -----
From: "Tim Potter"
Sent: Monday, November 11, 2002 4:39 PM
Subject: [Ethereal-cvs] cvs commit: ethereal packet-dcerpc-spoolss.c


> tpot        2002/11/10 23:39:52 CST
>
>   Modified files:
>     .                    packet-dcerpc-spoolss.c
>   Log:
>   Convert getprinter info 0, 1, 2, 3 to dissect_ndr routines. Hooray!
>
>   The old prs_DEVMODE function is still used by something else for the
>   moment.
>
>   Revision  Changes    Path
>   1.58      +893 -264  ethereal/packet-dcerpc-spoolss.c