Ethereal-cvs: [Ethereal-cvs] cvs commit: ethereal packet-dcerpc-nt.c packet-dcerpc-spoolss.c p

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

From: Guy Harris <guy@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 19 Mar 2002 16:09:25 -0600 (CST)
guy         2002/03/19 16:09:24 CST

  Modified files:
    .                    packet-dcerpc-nt.c 
                         packet-dcerpc-spoolss.c 
                         packet-dcerpc-lsa.c packet-dcerpc-nt.h 
  Log:
  There is no guarantee that a buffer obtained using "tvb_get_ptr()" is
  neatly aligned on a 2-byte or a 4-byte boundary, and there is no
  guarantee that a misaligned pointer can be dereferenced without getting
  a fault.
  
  Furthermore, there is no guarantee that, even if you *can* dereference a
  pointer to a 2-byte or 4-byte quantity in a packet, the resulting number
  you get back is in the right byte order; the data in the packet might
  have a different byte order from the machine on which you're running.
  
  Therefore, we change "prs_uint8s()", "prs_uint16s()", and
  "prs_uint32s()" to return the starting offset, in the tvbuff, of the
  collection of 8-bit, 16-bit, or 32-bit integral values, rather than a
  pointer to the raw packet data, and change their callers to fetch the
  data using "tvb_get_guint8()", "tvb_get_letohs()", and
  "tvb_get_letohl()" (the stuff in all the NT protocols is presumed to be
  little-endian here).  We also change "fake_unicode()" to take a tvbuff
  and an offset, rather than a data pointer, as arguments, and to use
  "tvb_get_letohs()" to fetch the Unicode characters (again, we assume
  little-endian Unicode).
  
  This requires "fake_unicode()" to establish a cleanup handler, so we
  don't leak memory if it throws an exception.
  
  We also make "fake_unicode()" use "g_malloc()" to allocate its buffer
  (we weren't checking for allocation failures in any case; with
  "g_malloc()", we'll abort on an allocation failure - if we can come up
  with a cleverer way of handling them, fine), and the matching frees to
  use "g_free()".  (We also insert some missing frees....)
  
  Fix some formats to print unsigned quantities with "%u", not "%d".
  
  Don't append text to items in the tree for non-string values in
  "dissect_ndr_nt_STRING_string()".
  
  Revision  Changes    Path
  1.19      +48 -54    ethereal/packet-dcerpc-nt.c
  1.5       +35 -42    ethereal/packet-dcerpc-spoolss.c
  1.8       +18 -16    ethereal/packet-dcerpc-lsa.c
  1.14      +5 -5      ethereal/packet-dcerpc-nt.h