diff options
author | Michael Mann <mmann78@netscape.net> | 2014-09-18 22:40:49 -0400 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2014-09-19 21:54:02 +0000 |
commit | e489df5024acc86b0bd3c9f41844b06ff7560d24 (patch) | |
tree | 9e86fc9b2ddf02df33ea626f4e205c9b110e9b73 /plugins | |
parent | 9fce9ba18886cb13555697ced309e77d45d03ea5 (diff) | |
download | wireshark-e489df5024acc86b0bd3c9f41844b06ff7560d24.tar.gz |
Don't assert that values fit in 32 bits if the NDR64 flag is set.
For now, this just pacifies fuzz-testing. If real world examples have this, there needs to be a drastic overhaul to support fields that could be either 32 or 64-bit values.
Bug:9329
Change-Id: I3e28808ca0291868a5f84258b0ee1e2a922703c2
Reviewed-on: https://code.wireshark.org/review/4189
Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/profinet/packet-dcerpc-pn-io.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/plugins/profinet/packet-dcerpc-pn-io.c b/plugins/profinet/packet-dcerpc-pn-io.c index 95588554a8..f8ebf4c1c6 100644 --- a/plugins/profinet/packet-dcerpc-pn-io.c +++ b/plugins/profinet/packet-dcerpc-pn-io.c @@ -6659,7 +6659,8 @@ dissect_LogData_block(tvbuff_t *tvb, int offset, guint64 u64LocaltimeStamp; e_uuid_t aruuid; guint32 u32EntryDetail; - + dcerpc_info di; /* fake dcerpc_info struct */ + dcerpc_call_value call_data; if (u8BlockVersionHigh != 1 || u8BlockVersionLow != 0) { expert_add_info_format(pinfo, item, &ei_pn_io_block_version, @@ -6667,8 +6668,14 @@ dissect_LogData_block(tvbuff_t *tvb, int offset, return offset; } + di.conformant_run = 0; + /* we need di->call_data->flags.NDR64 == 0 */ + call_data.flags = 0; + di.call_data = &call_data; + di.dcerpc_procedure_name = ""; + /* ActualLocalTimeStamp */ - offset = dissect_dcerpc_uint64(tvb, offset, pinfo, tree, drep, + offset = dissect_dcerpc_uint64(tvb, offset, pinfo, tree, &di, drep, hf_pn_io_actual_local_time_stamp, &u64ActualLocaltimeStamp); /* NumberOfLogEntries */ offset = dissect_dcerpc_uint16(tvb, offset, pinfo, tree, drep, @@ -6676,7 +6683,7 @@ dissect_LogData_block(tvbuff_t *tvb, int offset, while (u16NumberOfLogEntries--) { /* LocalTimeStamp */ - offset = dissect_dcerpc_uint64(tvb, offset, pinfo, tree, drep, + offset = dissect_dcerpc_uint64(tvb, offset, pinfo, tree, &di, drep, hf_pn_io_local_time_stamp, &u64LocaltimeStamp); /* ARUUID */ offset = dissect_dcerpc_uuid_t(tvb, offset, pinfo, tree, drep, |