aboutsummaryrefslogtreecommitdiffstats
path: root/packet-nbipx.c
diff options
context:
space:
mode:
authorguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>1999-11-30 07:45:42 +0000
committerguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>1999-11-30 07:45:42 +0000
commitd6c7b9db8fa3b85e66cfbb34a34adf35bab9a29a (patch)
treeda072bc0de7f3978d5e823834a42d0655ae8e96d /packet-nbipx.c
parentcc6e0cb34ffba6ca7ed9c6957cce8a448620f044 (diff)
Make the NetBIOS dissecting routines all take a pointer to the beginning
of the frame, plus at most one offset from the beginning of the frame, to make it clearer what the offset is. Then use that offset in at least some places to do bounds checking. If a packet has no payload, don't hand it to the SMB dissector. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@1165 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'packet-nbipx.c')
-rw-r--r--packet-nbipx.c83
1 files changed, 54 insertions, 29 deletions
diff --git a/packet-nbipx.c b/packet-nbipx.c
index 38be514e55..ab1ecdf243 100644
--- a/packet-nbipx.c
+++ b/packet-nbipx.c
@@ -2,7 +2,7 @@
* Routines for NetBIOS over IPX packet disassembly
* Gilbert Ramirez <gram@verdict.uthscsa.edu>
*
- * $Id: packet-nbipx.c,v 1.15 1999/11/16 11:42:38 guy Exp $
+ * $Id: packet-nbipx.c,v 1.16 1999/11/30 07:45:41 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -221,8 +221,8 @@ dissect_nbipx_ns(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
val_to_str(packet_type, nbipx_data_stream_type_vals, "Unknown"),
packet_type);
- netbios_add_name("Name", &pd[offset], offset,
- 34, nbipx_tree);
+ netbios_add_name("Name", pd, offset + 34,
+ nbipx_tree);
}
}
@@ -238,21 +238,37 @@ dissect_nbipx_dg(const u_char *pd, int offset, frame_data *fd, proto_tree *tree,
if (tree) {
ti = proto_tree_add_item(tree, proto_nbipx, offset,
- 2+16+16, NULL);
+ 2+NETBIOS_NAME_LEN+NETBIOS_NAME_LEN, NULL);
nbipx_tree = proto_item_add_subtree(ti, ett_nbipx);
proto_tree_add_text(nbipx_tree, offset, 1,
"Connection control: 0x%02x", pd[offset]);
- proto_tree_add_text(nbipx_tree, offset+1, 1,
+ offset += 1;
+ max_data -= 1;
+
+ if (!BYTES_ARE_IN_FRAME(offset, 1))
+ return;
+ proto_tree_add_text(nbipx_tree, offset, 1,
"Packet Type: %s (%02X)",
- val_to_str(pd[offset+1], nbipx_data_stream_type_vals, "Unknown"),
- pd[offset+1]);
- netbios_add_name("Receiver's Name", &pd[offset],
- offset, 2, nbipx_tree);
- netbios_add_name("Sender's Name", &pd[offset],
- offset, 2+16, nbipx_tree);
-
- dissect_smb(pd, offset+2+16+16, fd, tree, max_data - 2+16+16);
+ val_to_str(pd[offset], nbipx_data_stream_type_vals, "Unknown"),
+ pd[offset]);
+ offset += 1;
+ max_data -= 1;
+
+ if (!netbios_add_name("Receiver's Name", pd, offset,
+ nbipx_tree))
+ return;
+ offset += NETBIOS_NAME_LEN;
+ max_data -= NETBIOS_NAME_LEN;
+
+ if (!netbios_add_name("Sender's Name", pd, offset,
+ nbipx_tree))
+ return;
+ offset += NETBIOS_NAME_LEN;
+ max_data -= NETBIOS_NAME_LEN;
+
+ if (max_data != 0)
+ dissect_smb(pd, offset, fd, tree, max_data);
}
}
@@ -361,10 +377,12 @@ dissect_nwlink_dg(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
decode_boolean_bitfield(name_type_flag, 0x01, 8,
"Name deregistered", "Name not deregistered"));
- netbios_add_name("Group name", &pd[offset], offset,
- 36, nbipx_tree);
- netbios_add_name("Node name", &pd[offset], offset,
- 52, nbipx_tree);
+ if (!netbios_add_name("Group name", pd, offset+36,
+ nbipx_tree))
+ return;
+ if (!netbios_add_name("Node name", pd, offset+52,
+ nbipx_tree))
+ return;
proto_tree_add_text(nbipx_tree, offset+33, 1,
"Packet Type: %s (%02X)",
val_to_str(packet_type, nwlink_data_stream_type_vals, "Unknown"),
@@ -378,22 +396,29 @@ dissect_nwlink_dg(const u_char *pd, int offset, frame_data *fd, proto_tree *tree
packet_type);
proto_tree_add_text(nbipx_tree, offset+34, 2,
"Message ID: 0x%04x", pletohs(&pd[offset+34]));
- netbios_add_name("Requested name", &pd[offset], offset,
- 36, nbipx_tree);
- netbios_add_name("Source name", &pd[offset], offset,
- 52, nbipx_tree);
+ if (!netbios_add_name("Requested name", pd, offset+36,
+ nbipx_tree))
+ return;
+ if (!netbios_add_name("Source name", pd, offset+52,
+ nbipx_tree))
+ return;
}
}
- switch (packet_type) {
- case NWLINK_SMB:
- case NWLINK_NETBIOS_DATAGRAM:
- dissect_smb(pd, offset + 68, fd, tree, max_data - 68);
- break;
+ offset += 68;
+ max_data -= 68;
+
+ if (max_data != 0) {
+ switch (packet_type) {
+ case NWLINK_SMB:
+ case NWLINK_NETBIOS_DATAGRAM:
+ dissect_smb(pd, offset, fd, tree, max_data);
+ break;
- default:
- dissect_data(pd, offset + 68, fd, tree);
- break;
+ default:
+ dissect_data(pd, offset, fd, tree);
+ break;
+ }
}
}