diff options
author | tpot <tpot@f5534014-38df-0310-8fa8-9805f1628bb7> | 2003-01-30 05:11:33 +0000 |
---|---|---|
committer | tpot <tpot@f5534014-38df-0310-8fa8-9805f1628bb7> | 2003-01-30 05:11:33 +0000 |
commit | f0a2fd0824c2d974c48f7ab3b7481b662926073d (patch) | |
tree | f9bed4d9a109c8713ca401a37a197bbaa08ab762 /packet-dcerpc-spoolss.c | |
parent | d10172b52bd733d6a315dc1baa1ffb8110a254e7 (diff) |
Clean up the handling of null buffers in getprinter, getform,
getjob and getprinterdriver2.
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@7037 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'packet-dcerpc-spoolss.c')
-rw-r--r-- | packet-dcerpc-spoolss.c | 192 |
1 files changed, 93 insertions, 99 deletions
diff --git a/packet-dcerpc-spoolss.c b/packet-dcerpc-spoolss.c index e1e9708c60..a53bfd97f1 100644 --- a/packet-dcerpc-spoolss.c +++ b/packet-dcerpc-spoolss.c @@ -2,7 +2,7 @@ * Routines for SMB \PIPE\spoolss packet disassembly * Copyright 2001-2003, Tim Potter <tpot@samba.org> * - * $Id: packet-dcerpc-spoolss.c,v 1.74 2003/01/28 22:51:54 tpot Exp $ + * $Id: packet-dcerpc-spoolss.c,v 1.75 2003/01/30 05:11:33 tpot Exp $ * * Ethereal - Network traffic analyzer * By Gerald Combs <gerald@ethereal.com> @@ -3489,54 +3489,51 @@ static int SpoolssGetPrinter_r(tvbuff_t *tvb, int offset, packet_info *pinfo, offset = dissect_spoolss_buffer( tvb, offset, pinfo, tree, drep, &buffer); - if (!buffer.tvb || !tvb_length(buffer.tvb)) - goto done; - - switch(level) { - case 0: - case 1: - case 2: - case 3: - case 7: - item = proto_tree_add_text( - buffer.tree, buffer.tvb, 0, -1, - "PRINTER_INFO_%d", level); - - /* XXX: is the ett value correct here? */ - - subtree = proto_item_add_subtree(item, ett_UNISTR2); - break; - } + if (buffer.tvb) { + switch(level) { + case 0: + case 1: + case 2: + case 3: + case 7: + item = proto_tree_add_text( + buffer.tree, buffer.tvb, 0, -1, + "PRINTER_INFO_%d", level); + + /* XXX: is the ett value correct here? */ + + subtree = proto_item_add_subtree(item, ett_UNISTR2); + break; + } - switch(level) { - case 0: - dissect_PRINTER_INFO_0( - buffer.tvb, 0, pinfo, subtree, drep); - break; - case 1: - dissect_PRINTER_INFO_1( - buffer.tvb, 0, pinfo, subtree, drep); - break; - case 2: - dissect_PRINTER_INFO_2( - buffer.tvb, 0, pinfo, subtree, drep); - break; - case 3: - dissect_PRINTER_INFO_3( - buffer.tvb, 0, pinfo, subtree, drep); - break; - case 7: - dissect_PRINTER_INFO_7( - buffer.tvb, 0, pinfo, subtree, drep); - break; - default: - proto_tree_add_text(buffer.tree, buffer.tvb, 0, -1, - "[Unknown info level %d]", level); - break; + switch(level) { + case 0: + dissect_PRINTER_INFO_0( + buffer.tvb, 0, pinfo, subtree, drep); + break; + case 1: + dissect_PRINTER_INFO_1( + buffer.tvb, 0, pinfo, subtree, drep); + break; + case 2: + dissect_PRINTER_INFO_2( + buffer.tvb, 0, pinfo, subtree, drep); + break; + case 3: + dissect_PRINTER_INFO_3( + buffer.tvb, 0, pinfo, subtree, drep); + break; + case 7: + dissect_PRINTER_INFO_7( + buffer.tvb, 0, pinfo, subtree, drep); + break; + default: + proto_tree_add_text(buffer.tree, buffer.tvb, 0, -1, + "[Unknown info level %d]", level); + break; + } } - done: - offset = dissect_ndr_uint32( tvb, offset, pinfo, tree, drep, hf_spoolss_needed, NULL); @@ -4602,7 +4599,6 @@ static int SpoolssGetForm_r(tvbuff_t *tvb, int offset, packet_info *pinfo, dcerpc_info *di = (dcerpc_info *)pinfo->private_data; dcerpc_call_value *dcv = (dcerpc_call_value *)di->call_data; BUFFER buffer; - int buffer_offset; guint32 level = (guint32)dcv->private_data; if (dcv->req_frame != 0) @@ -4620,29 +4616,27 @@ static int SpoolssGetForm_r(tvbuff_t *tvb, int offset, packet_info *pinfo, if (check_col(pinfo->cinfo, COL_INFO)) col_append_fstr(pinfo->cinfo, COL_INFO, ", level %d", level); - if (!buffer.tvb || !tvb_length(buffer.tvb)) - goto done; - - buffer_offset = 0; - - switch(level) { - case 1: { - int struct_start = buffer_offset; - - buffer_offset = dissect_FORM_REL( - buffer.tvb, buffer_offset, pinfo, tree, drep, - struct_start); - break; - } + if (buffer.tvb) { + int buffer_offset = 0; - default: - proto_tree_add_text( - buffer.tree, buffer.tvb, buffer_offset, -1, - "[Unknown info level %d]", level); - goto done; + switch(level) { + case 1: { + int struct_start = buffer_offset; + + buffer_offset = dissect_FORM_REL( + buffer.tvb, buffer_offset, pinfo, tree, drep, + struct_start); + break; + } + + default: + proto_tree_add_text( + buffer.tree, buffer.tvb, buffer_offset, -1, + "[Unknown info level %d]", level); + break; + } } - done: offset = dissect_doserror(tvb, offset, pinfo, tree, drep, hf_spoolss_rc, NULL); @@ -4973,7 +4967,6 @@ static int SpoolssGetJob_r(tvbuff_t *tvb, int offset, packet_info *pinfo, dcerpc_call_value *dcv = (dcerpc_call_value *)di->call_data; gint32 level = (guint32)dcv->private_data; BUFFER buffer; - int buffer_offset; if (dcv->req_frame != 0) proto_tree_add_text(tree, tvb, offset, 0, @@ -4984,25 +4977,24 @@ static int SpoolssGetJob_r(tvbuff_t *tvb, int offset, packet_info *pinfo, offset = dissect_spoolss_buffer(tvb, offset, pinfo, tree, drep, &buffer); - if (!buffer.tvb || !tvb_length(buffer.tvb)) - goto done; - - buffer_offset = 0; - - switch(level) { - case 1: - buffer_offset = dissect_spoolss_JOB_INFO_1( - buffer.tvb, buffer_offset, pinfo, buffer.tree, drep); - break; - case 2: - default: - proto_tree_add_text( - buffer.tree, buffer.tvb, buffer_offset, -1, - "[Unknown info level %d]", level); - goto done; + if (buffer.tvb) { + int buffer_offset = 0; + + switch(level) { + case 1: + buffer_offset = dissect_spoolss_JOB_INFO_1( + buffer.tvb, buffer_offset, pinfo, + buffer.tree, drep); + break; + case 2: + default: + proto_tree_add_text( + buffer.tree, buffer.tvb, buffer_offset, -1, + "[Unknown info level %d]", level); + break; + } } -done: offset = dissect_ndr_uint32( tvb, offset, pinfo, tree, drep, hf_spoolss_needed, NULL); @@ -5761,20 +5753,22 @@ static int SpoolssGetPrinterDriver2_r(tvbuff_t *tvb, int offset, offset = dissect_spoolss_buffer(tvb, offset, pinfo, tree, drep, &buffer); - switch(level) { - case 1: - dissect_DRIVER_INFO_1( - buffer.tvb, 0, pinfo, buffer.tree, drep); - break; - case 3: - dissect_DRIVER_INFO_3( - buffer.tvb, 0, pinfo, buffer.tree, drep); - break; - default: - proto_tree_add_text( - buffer.tree, buffer.tvb, 0, -1, - "[Unknown info level %d]", level); - break; + if (buffer.tvb) { + switch(level) { + case 1: + dissect_DRIVER_INFO_1( + buffer.tvb, 0, pinfo, buffer.tree, drep); + break; + case 3: + dissect_DRIVER_INFO_3( + buffer.tvb, 0, pinfo, buffer.tree, drep); + break; + default: + proto_tree_add_text( + buffer.tree, buffer.tvb, 0, -1, + "[Unknown info level %d]", level); + break; + } } offset = dissect_ndr_uint32( |