aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/dissectors/packet-aeron.c3
-rw-r--r--epan/dissectors/packet-alljoyn.c7
-rw-r--r--epan/dissectors/packet-dbus.c3
-rw-r--r--epan/dissectors/packet-ieee80211.c21
-rw-r--r--epan/dissectors/packet-iscsi.c3
-rw-r--r--epan/dissectors/packet-netlink.c3
-rw-r--r--epan/dissectors/packet-nflog.c3
-rw-r--r--epan/dissectors/packet-openflow_v6.c7
-rw-r--r--epan/dissectors/packet-ospf.c13
-rw-r--r--epan/dissectors/packet-pathport.c4
-rw-r--r--epan/dissectors/packet-pvfs2.c10
-rw-r--r--epan/dissectors/packet-smb2.c5
-rw-r--r--epan/dissectors/packet-stun.c5
-rw-r--r--epan/dissectors/packet-usb.c5
-rw-r--r--epan/dissectors/packet-yami.c11
-rw-r--r--wiretap/pcapng.c3
-rw-r--r--wiretap/snoop.c3
-rw-r--r--wsutil/CMakeLists.txt1
-rw-r--r--wsutil/ws_roundup.h22
19 files changed, 82 insertions, 50 deletions
diff --git a/epan/dissectors/packet-aeron.c b/epan/dissectors/packet-aeron.c
index 71cfd1eb24..7adbca6ac4 100644
--- a/epan/dissectors/packet-aeron.c
+++ b/epan/dissectors/packet-aeron.c
@@ -18,6 +18,7 @@
#include <epan/exceptions.h>
#include <epan/to_str.h>
#include <wsutil/pint.h>
+#include <wsutil/ws_roundup.h>
/*
* The Aeron protocol is defined at
@@ -55,7 +56,7 @@ typedef struct
static int aeron_pos_roundup(int offset)
{
- return ((offset+31) & (~31));
+ return WS_ROUNDUP_32(offset);
}
static int aeron_pos_compare(const aeron_pos_t * pos1, const aeron_pos_t * pos2)
diff --git a/epan/dissectors/packet-alljoyn.c b/epan/dissectors/packet-alljoyn.c
index c380e2eab7..e501605e0f 100644
--- a/epan/dissectors/packet-alljoyn.c
+++ b/epan/dissectors/packet-alljoyn.c
@@ -12,6 +12,7 @@
#include "config.h"
#include <epan/packet.h>
#include <epan/expert.h>
+#include <wsutil/ws_roundup.h>
void proto_register_AllJoyn(void);
void proto_reg_handoff_AllJoyn(void);
@@ -245,9 +246,9 @@ static gint ett_alljoyn_mess_header = -1;
static gint ett_alljoyn_mess_body_parameters = -1;
static gint ett_alljoyn_ardp = -1; /* This is the top ARDP tree. */
-#define ROUND_TO_2BYTE(len) ((len + 1) & ~1)
-#define ROUND_TO_4BYTE(len) ((len + 3) & ~3)
-#define ROUND_TO_8BYTE(len) ((len + 7) & ~7)
+#define ROUND_TO_2BYTE(len) WS_ROUNDUP_2(len)
+#define ROUND_TO_4BYTE(len) WS_ROUNDUP_4(len)
+#define ROUND_TO_8BYTE(len) WS_ROUNDUP_8(len)
static const value_string endian_encoding_vals[] = {
{ 'B', "Big endian" },
diff --git a/epan/dissectors/packet-dbus.c b/epan/dissectors/packet-dbus.c
index ceccac9720..5ea20a7dab 100644
--- a/epan/dissectors/packet-dbus.c
+++ b/epan/dissectors/packet-dbus.c
@@ -18,6 +18,7 @@
#include <wiretap/wtap.h>
#include <epan/expert.h>
#include <epan/ptvcursor.h>
+#include <wsutil/ws_roundup.h>
#include "packet-tcp.h"
#define DBUS_MAX_ARRAY_LEN (64 * 1024 * 1024)
@@ -1212,7 +1213,7 @@ get_dbus_message_len(packet_info *pinfo _U_, tvbuff_t *tvb,
}
len_hdr = DBUS_HEADER_LEN + get_guint32(tvb, offset + 12);
- len_hdr = (len_hdr + 7) & ~7;
+ len_hdr = WS_ROUNDUP_8(len_hdr);
len_body = get_guint32(tvb, offset + 4);
return len_hdr + len_body;
diff --git a/epan/dissectors/packet-ieee80211.c b/epan/dissectors/packet-ieee80211.c
index 036adff1e9..56681baac5 100644
--- a/epan/dissectors/packet-ieee80211.c
+++ b/epan/dissectors/packet-ieee80211.c
@@ -53,6 +53,7 @@
#include <epan/exceptions.h>
#include <wsutil/pint.h>
#include <wsutil/str_util.h>
+#include <wsutil/ws_roundup.h>
#include <epan/addr_resolv.h>
#include <epan/address_types.h>
#include <epan/strutil.h>
@@ -135,10 +136,6 @@ sta_prop_equal_fn(gconstpointer v, gconstpointer w)
return memcmp(k1, k2, 6) == 0; /* Compare each address for equality */
}
-#ifndef roundup2
-#define roundup2(x, y) (((x)+((y)-1))&(~((y)-1))) /* if y is powers of two */
-#endif
-
/* bitmask for bits [l..h]
* taken from kernel's include/linux/bitops.h
*/
@@ -8359,7 +8356,7 @@ add_mimo_csi_matrices_report(proto_tree *tree, tvbuff_t *tvb, int offset, mimo_c
ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
csi_matrix_size = ns*(3+(2*mimo_cntrl.nc*mimo_cntrl.nr*mimo_cntrl.coefficient_size));
- csi_matrix_size = roundup2(csi_matrix_size, 8) / 8;
+ csi_matrix_size = WS_ROUNDUP_8(csi_matrix_size) / 8;
proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_matrices, tvb, offset, csi_matrix_size, ENC_NA);
offset += csi_matrix_size;
return offset - start_offset;
@@ -8387,7 +8384,7 @@ add_mimo_beamforming_feedback_report(proto_tree *tree, tvbuff_t *tvb, int offset
ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
csi_matrix_size = ns*(2*mimo_cntrl.nc*mimo_cntrl.nr*mimo_cntrl.coefficient_size);
- csi_matrix_size = roundup2(csi_matrix_size, 8) / 8;
+ csi_matrix_size = WS_ROUNDUP_8(csi_matrix_size) / 8;
proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_bf_matrices, tvb, offset, csi_matrix_size, ENC_NA);
offset += csi_matrix_size;
return offset - start_offset;
@@ -8430,7 +8427,7 @@ add_mimo_compressed_beamforming_feedback_report(proto_tree *tree, tvbuff_t *tvb,
na = get_mimo_na(mimo_cntrl.nr, mimo_cntrl.nc);
ns = get_mimo_ns(mimo_cntrl.chan_width, mimo_cntrl.grouping);
csi_matrix_size = ns*(na*((mimo_cntrl.codebook_info+1)*2 + 2)/2);
- csi_matrix_size = roundup2(csi_matrix_size, 8) / 8;
+ csi_matrix_size = WS_ROUNDUP_8(csi_matrix_size) / 8;
proto_tree_add_item(snr_tree, hf_ieee80211_ff_mimo_csi_cbf_matrices, tvb, offset, csi_matrix_size, ENC_NA);
offset += csi_matrix_size;
return offset - start_offset;
@@ -8495,7 +8492,7 @@ capture_ieee80211_common(const guchar * pd, int offset, int len,
* is before the mesh header, possibly because it doesn't
* recognize the mesh header.
*/
- hdr_length = roundup2(hdr_length, 4);
+ hdr_length = WS_ROUNDUP_4(hdr_length);
}
/*
@@ -14365,7 +14362,7 @@ add_ff_vht_compressed_beamforming_report(proto_tree *tree, tvbuff_t *tvb, packet
carry = 1;
else
carry = 0;
- len = roundup2((pos + matrix_size), 8)/8 - roundup2(pos, 8)/8;
+ len = WS_ROUNDUP_8(pos + matrix_size)/8 - WS_ROUNDUP_8(pos)/8;
scidx = vht_compressed_skip_scidx(chan_width, grouping, scidx);
/* TODO : For certain values from na_arr, there is always going be a carry over or overflow from the previous or
@@ -32555,7 +32552,7 @@ dissect_ieee80211_pv0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
* is before the mesh header, possibly because it doesn't
* recognize the mesh header.
*/
- hdr_len = roundup2(hdr_len, 4);
+ hdr_len = WS_ROUNDUP_4(hdr_len);
}
if (FCF_FRAME_TYPE (fcf) == DATA_FRAME) {
@@ -33909,7 +33906,7 @@ dissect_ieee80211_pv0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
msdu_length = tvb_get_ntohs(next_tvb, msdu_offset+12);
parent_item = proto_tree_add_item(mpdu_tree, hf_ieee80211_amsdu_subframe, next_tvb,
- msdu_offset, roundup2(msdu_offset+14+msdu_length, 4), ENC_NA);
+ msdu_offset, WS_ROUNDUP_4(msdu_offset+14+msdu_length), ENC_NA);
proto_item_append_text(parent_item, " #%u", i);
subframe_tree = proto_item_add_subtree(parent_item, ett_msdu_aggregation_subframe_tree);
i += 1;
@@ -33929,7 +33926,7 @@ dissect_ieee80211_pv0(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
msdu_offset += 14;
msdu_tvb = tvb_new_subset_length(next_tvb, msdu_offset, msdu_length);
call_dissector(llc_handle, msdu_tvb, pinfo, subframe_tree);
- msdu_offset = roundup2(msdu_offset+msdu_length, 4);
+ msdu_offset = WS_ROUNDUP_4(msdu_offset+msdu_length);
} while (tvb_reported_length_remaining(next_tvb, msdu_offset) > 14);
} else {
/* I guess some bridges take Netware Ethernet_802_3 frames,
diff --git a/epan/dissectors/packet-iscsi.c b/epan/dissectors/packet-iscsi.c
index 9a375c55e7..0bb8d31f0a 100644
--- a/epan/dissectors/packet-iscsi.c
+++ b/epan/dissectors/packet-iscsi.c
@@ -30,6 +30,7 @@
#include <epan/crc32-tvb.h>
#include <wsutil/crc32.h>
#include <wsutil/strtoi.h>
+#include <wsutil/ws_roundup.h>
void proto_register_iscsi(void);
void proto_reg_handoff_iscsi(void);
@@ -1035,7 +1036,7 @@ dissect_iscsi_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint off
/* strip off padding bytes */
if(ahs_offset & 3){
- ahs_offset=(ahs_offset+3) & ~3;
+ ahs_offset=WS_ROUNDUP_4(ahs_offset);
}
}
diff --git a/epan/dissectors/packet-netlink.c b/epan/dissectors/packet-netlink.c
index 20c1c9f2d7..b3bad498b9 100644
--- a/epan/dissectors/packet-netlink.c
+++ b/epan/dissectors/packet-netlink.c
@@ -17,6 +17,7 @@
#include <epan/arptypes.h>
#include <epan/exceptions.h>
#include <wiretap/wtap.h>
+#include <wsutil/ws_roundup.h>
#include "packet-netlink.h"
@@ -348,7 +349,7 @@ dissect_netlink_attributes_common(tvbuff_t *tvb, header_field_info *hfi_type, in
}
/* Assume offset already aligned, next offset is rta_len plus alignment. */
- rta_len = MIN((rta_len + 3) & ~3, data_length);
+ rta_len = MIN(WS_ROUNDUP_4(rta_len), data_length);
offset += rta_len - 4; /* Header was already skipped */
if (data_length < rta_len)
THROW(ReportedBoundsError);
diff --git a/epan/dissectors/packet-nflog.c b/epan/dissectors/packet-nflog.c
index 3f3931c0ff..b60034d125 100644
--- a/epan/dissectors/packet-nflog.c
+++ b/epan/dissectors/packet-nflog.c
@@ -15,6 +15,7 @@
#include <epan/etypes.h>
#include <epan/packet.h>
#include <wiretap/wtap.h>
+#include <wsutil/ws_roundup.h>
#include "packet-netlink.h"
@@ -280,7 +281,7 @@ dissect_nflog(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U
if (tlv_type == WS_NFULA_PAYLOAD)
next_tvb = tvb_new_subset_length(tvb, offset + 4, value_len);
- offset += ((tlv_len + 3) & ~3); /* next TLV aligned to 4B */
+ offset += WS_ROUNDUP_4(tlv_len); /* next TLV aligned to 4B */
}
if (next_tvb && hw_protocol) {
diff --git a/epan/dissectors/packet-openflow_v6.c b/epan/dissectors/packet-openflow_v6.c
index 5cdf7e3251..ba59151bfb 100644
--- a/epan/dissectors/packet-openflow_v6.c
+++ b/epan/dissectors/packet-openflow_v6.c
@@ -19,6 +19,7 @@
#include <epan/expert.h>
#include <epan/ipproto.h>
#include <epan/addr_resolv.h>
+#include <wsutil/ws_roundup.h>
void proto_register_openflow_v6(void);
void proto_reg_handoff_openflow_v6(void);
@@ -1138,7 +1139,7 @@ dissect_openflow_stats_v6(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tre
offset = oxs_end;
}
- padding = ((stats_length + 7) & ~7) - stats_length;
+ padding = WS_ROUNDUP_8(stats_length) - stats_length;
if (padding) {
proto_tree_add_item(tree, hf_openflow_v6_stats_pad, tvb, oxs_end, padding, ENC_NA);
offset += padding;
@@ -2863,7 +2864,7 @@ dissect_openflow_port_desc_prop_v6(tvbuff_t *tvb, packet_info *pinfo _U_, proto_
while(offset < fields_end) {
offset = dissect_openflow_oxm_v6(tvb, pinfo, prop_tree, offset, length);
}
- offset+=((prop_length + 7) & ~7) - prop_length;
+ offset+=WS_ROUNDUP_8(prop_length) - prop_length;
break;
case OFPPDPT_RECIRCULATE:
@@ -2872,7 +2873,7 @@ dissect_openflow_port_desc_prop_v6(tvbuff_t *tvb, packet_info *pinfo _U_, proto_
proto_tree_add_item(tree, hf_openflow_v6_port_desc_prop_recirculate_port_no, tvb, offset, 4, ENC_BIG_ENDIAN);
offset += 4;
}
- offset+=((prop_length + 7) & ~7) - prop_length;
+ offset+=WS_ROUNDUP_8(prop_length) - prop_length;
break;
case OFPPDPT_EXPERIMENTER:
diff --git a/epan/dissectors/packet-ospf.c b/epan/dissectors/packet-ospf.c
index 5403c4634d..0785424ed5 100644
--- a/epan/dissectors/packet-ospf.c
+++ b/epan/dissectors/packet-ospf.c
@@ -62,6 +62,7 @@
#include <epan/in_cksum.h>
#include <epan/expert.h>
#include <epan/addr_resolv.h>
+#include <wsutil/ws_roundup.h>
#include "packet-rsvp.h"
void proto_register_ospf(void);
@@ -2811,7 +2812,7 @@ dissect_ospf_lsa_opaque_ri(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_
proto_tree_add_item(stlv_tree, hf_ospf_tlv_value, tvb, stlv_offset + 4, stlv_length, ENC_NA);
break;
}
- stlv_offset += 4 + ((stlv_length + 3) & ~3);
+ stlv_offset += 4 + WS_ROUNDUP_4(stlv_length);
}
break;
@@ -2863,7 +2864,7 @@ dissect_ospf_lsa_opaque_ri(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_
* RFC 7770, section 2.3: 4-octet aligned, but type, length and padding
* is not included in the length.
* */
- offset += 4 + ((tlv_length + 3) & ~3);
+ offset += 4 + WS_ROUNDUP_4(tlv_length);
}
}
@@ -3013,7 +3014,7 @@ dissect_ospf_lsa_ext_prefix(tvbuff_t *tvb, packet_info *pinfo, int offset, proto
proto_tree_add_item(stlv_tree, hf_ospf_tlv_value, tvb, stlv_offset + 4, stlv_length, ENC_NA);
break;
}
- stlv_offset += 4 + ((stlv_length + 3) & ~3);
+ stlv_offset += 4 + WS_ROUNDUP_4(stlv_length);
}
}
@@ -3021,7 +3022,7 @@ dissect_ospf_lsa_ext_prefix(tvbuff_t *tvb, packet_info *pinfo, int offset, proto
* RFC 7770, section 2.3: 4-octet aligned, but type, length and padding
* is not included in the length.
* */
- offset += 4 + ((tlv_length + 3) & ~3);
+ offset += 4 + WS_ROUNDUP_4(tlv_length);
}
}
@@ -3180,7 +3181,7 @@ dissect_ospf_lsa_ext_link(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_t
proto_tree_add_item(stlv_tree, hf_ospf_tlv_value, tvb, stlv_offset + 4, stlv_length, ENC_NA);
break;
}
- stlv_offset += 4 + ((stlv_length + 3) & ~3);
+ stlv_offset += 4 + WS_ROUNDUP_4(stlv_length);
}
break;
@@ -3203,7 +3204,7 @@ dissect_ospf_lsa_ext_link(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_t
* RFC 7770, section 2.3: 4-octet aligned, but type, length and padding
* is not included in the length.
* */
- offset += 4 + ((tlv_length + 3) & ~3);
+ offset += 4 + WS_ROUNDUP_4(tlv_length);
}
}
diff --git a/epan/dissectors/packet-pathport.c b/epan/dissectors/packet-pathport.c
index 298d4ad576..61a6c7e9ea 100644
--- a/epan/dissectors/packet-pathport.c
+++ b/epan/dissectors/packet-pathport.c
@@ -12,7 +12,7 @@
#include "config.h"
#include <epan/packet.h>
#include <epan/to_str.h>
-
+#include <wsutil/ws_roundup.h>
#define PATHPORT_UDP_PORT 3792 /* Not IANA registered */
#define PATHPORT_MIN_LENGTH 24 /* HEADER + 1 PDU */
@@ -26,7 +26,7 @@
#define PATHPORT_HEADER_END (PATHPORT_HEADER_OFFSET + PATHPORT_HEADER_LENGTH)
/** Rounds the specified integer up to the next multiple of four. */
-#define roof4(a) (((a)+3)&~3)
+#define roof4(a) WS_ROUNDUP_4(a)
void proto_reg_handoff_pathport(void);
void proto_register_pathport(void);
diff --git a/epan/dissectors/packet-pvfs2.c b/epan/dissectors/packet-pvfs2.c
index 258dcc3e51..c25bc7773d 100644
--- a/epan/dissectors/packet-pvfs2.c
+++ b/epan/dissectors/packet-pvfs2.c
@@ -25,6 +25,7 @@
#include <epan/prefs.h>
#include <epan/strutil.h>
#include <epan/expert.h>
+#include <wsutil/ws_roundup.h>
#include "packet-tcp.h"
#define TCP_PORT_PVFS2 3334 /* Not IANA registered */
@@ -756,9 +757,6 @@ dissect_pvfs2_ds_type(tvbuff_t *tvb, proto_tree *tree, int offset,
return offset;
}
-#define roundup4(x) (((x) + 3) & ~3)
-#define roundup8(x) (((x) + 7) & ~7)
-
static int
dissect_pvfs_opaque_data(tvbuff_t *tvb, int offset,
proto_tree *tree,
@@ -813,9 +811,9 @@ dissect_pvfs_opaque_data(tvbuff_t *tvb, int offset,
*/
if (!string_data)
- string_length_full = roundup4(string_length);
+ string_length_full = WS_ROUNDUP_4(string_length);
else
- string_length_full = roundup8(4 + string_length);
+ string_length_full = WS_ROUNDUP_8(4 + string_length);
if (string_length_captured < string_length) {
/* truncated string */
@@ -1148,7 +1146,7 @@ dissect_pvfs_distribution(tvbuff_t *tvb, proto_tree *tree, int offset)
tmpstr = (char *) tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 4, distlen, ENC_ASCII);
/* 'distlen' does not include the NULL terminator */
- total_len = roundup8(4 + distlen + 1);
+ total_len = WS_ROUNDUP_8(4 + distlen + 1);
if (((distlen + 1) == PVFS_DIST_SIMPLE_STRIPE_NAME_SIZE) &&
(g_ascii_strncasecmp(tmpstr, PVFS_DIST_SIMPLE_STRIPE_NAME,
diff --git a/epan/dissectors/packet-smb2.c b/epan/dissectors/packet-smb2.c
index e1e021bf15..9617e0a597 100644
--- a/epan/dissectors/packet-smb2.c
+++ b/epan/dissectors/packet-smb2.c
@@ -41,6 +41,7 @@
#include "read_keytab_file.h"
#include <wsutil/wsgcrypt.h>
+#include <wsutil/ws_roundup.h>
//#define DEBUG_SMB2
#ifdef DEBUG_SMB2
@@ -5313,7 +5314,7 @@ dissect_smb2_negotiate_protocol_request(tvbuff_t *tvb, packet_info *pinfo, proto
}
for (i = 0; i < ncc; i++) {
- offset = (offset + 7) & ~7;
+ offset = WS_ROUNDUP_8(offset);
offset = dissect_smb2_negotiate_context(tvb, pinfo, tree, offset, si);
}
@@ -5430,7 +5431,7 @@ dissect_smb2_negotiate_protocol_response(tvbuff_t *tvb, packet_info *pinfo, prot
}
for (i = 0; i < ncc; i++) {
- offset = (offset + 7) & ~7;
+ offset = WS_ROUNDUP_8(offset);
offset = dissect_smb2_negotiate_context(tvb, pinfo, tree, offset, si);
}
diff --git a/epan/dissectors/packet-stun.c b/epan/dissectors/packet-stun.c
index f7191a5ccd..8bbd3a620a 100644
--- a/epan/dissectors/packet-stun.c
+++ b/epan/dissectors/packet-stun.c
@@ -54,6 +54,7 @@
#include <epan/packet.h>
#include <epan/expert.h>
#include <epan/to_str.h>
+#include <wsutil/ws_roundup.h>
#include "packet-tcp.h"
void proto_register_stun(void);
@@ -1068,7 +1069,7 @@ dissect_stun_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboole
att_type = tvb_get_ntohs(tvb, offset); /* Attribute type field in attribute header */
att_length = tvb_get_ntohs(tvb, offset+2); /* Attribute length field in attribute header */
if (network_version >= NET_VER_5389)
- att_length_pad = (att_length + 3) & ~3; /* Attribute length including padding */
+ att_length_pad = WS_ROUNDUP_4(att_length); /* Attribute length including padding */
else
att_length_pad = att_length;
att_type_display = att_type;
@@ -1304,7 +1305,7 @@ dissect_stun_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboole
}
}
/* Hopefully, in case MS-TURN ever gets PASSWORD-ALGORITHM(S) support they will add it with padding */
- alg_param_len_pad = (alg_param_len + 3) & ~3;
+ alg_param_len_pad = WS_ROUNDUP_4(alg_param_len);
if (alg_param_len < alg_param_len_pad)
proto_tree_add_uint(att_tree, hf_stun_att_padding, tvb, loopoffset+alg_param_len, alg_param_len_pad-alg_param_len, alg_param_len_pad-alg_param_len);
diff --git a/epan/dissectors/packet-usb.c b/epan/dissectors/packet-usb.c
index ad0289a66a..754f09feb2 100644
--- a/epan/dissectors/packet-usb.c
+++ b/epan/dissectors/packet-usb.c
@@ -26,6 +26,7 @@
#include <epan/decode_as.h>
#include <epan/proto_data.h>
#include <wsutil/pint.h>
+#include <wsutil/ws_roundup.h>
#include "packet-usb.h"
#include "packet-mausb.h"
@@ -4554,7 +4555,7 @@ dissect_darwin_usb_iso_transfer(packet_info *pinfo _U_, proto_tree *tree, usb_he
/* Padding to align the next header */
offset += frame_header_length;
- offset = ((offset + 3) & ~3);
+ offset = WS_ROUNDUP_4(offset);
iso_tree_start = offset;
len -= frame_header_length;
@@ -4685,7 +4686,7 @@ dissect_freebsd_usb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent, void
*/
proto_tree_add_item(frame_tree, hf_usb_frame_data, tvb, offset,
framelen, ENC_NA);
- offset += (framelen + 3) & ~3;
+ offset += WS_ROUNDUP_4(framelen);
}
proto_item_set_end(ti, tvb, offset);
}
diff --git a/epan/dissectors/packet-yami.c b/epan/dissectors/packet-yami.c
index 9d09a6ff43..6381d49cab 100644
--- a/epan/dissectors/packet-yami.c
+++ b/epan/dissectors/packet-yami.c
@@ -19,6 +19,7 @@
#include <epan/packet.h>
#include <epan/prefs.h>
#include <epan/to_str.h>
+#include <wsutil/ws_roundup.h>
#include "packet-tcp.h"
void proto_reg_handoff_yami(void);
@@ -145,7 +146,7 @@ dissect_yami_parameter(tvbuff_t *tvb, proto_tree *tree, int offset, proto_item *
name = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, name_len, ENC_ASCII | ENC_NA);
proto_item_append_text(ti, ": %s", name);
proto_item_append_text(par_ti, "%s, ", name);
- offset += (name_len + 3) & ~3;
+ offset += WS_ROUNDUP_4(name_len);
proto_tree_add_string(yami_param, &hfi_yami_param_name, tvb, name_offset, offset - name_offset, name);
type = tvb_get_letohl(tvb, offset);
@@ -201,7 +202,7 @@ dissect_yami_parameter(tvbuff_t *tvb, proto_tree *tree, int offset, proto_item *
val = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, val_len, ENC_ASCII | ENC_NA);
proto_item_append_text(ti, ", Type: string, Value: \"%s\"", val);
- offset += (val_len + 3) & ~3;
+ offset += WS_ROUNDUP_4(val_len);
proto_tree_add_string(yami_param, &hfi_yami_param_value_str, tvb, val_offset, offset - val_offset, val);
break;
}
@@ -220,7 +221,7 @@ dissect_yami_parameter(tvbuff_t *tvb, proto_tree *tree, int offset, proto_item *
repr = bytes_to_str(wmem_packet_scope(), val, val_len);
proto_item_append_text(ti, ", Type: binary, Value: %s", repr);
- offset += (val_len + 3) & ~3;
+ offset += WS_ROUNDUP_4(val_len);
proto_tree_add_bytes_format_value(yami_param, &hfi_yami_param_value_bin, tvb, val_offset, offset - val_offset, val, "%s", repr);
break;
}
@@ -354,7 +355,7 @@ dissect_yami_parameter(tvbuff_t *tvb, proto_tree *tree, int offset, proto_item *
proto_item_append_text(ti, "\"%s\", ", val);
proto_tree_add_string(yami_param, &hfi_yami_param_value_str, tvb, val_offset, offset - val_offset, val);
- offset += (val_len + 3) & ~3;
+ offset += WS_ROUNDUP_4(val_len);
}
proto_item_append_text(ti, "}");
break;
@@ -384,7 +385,7 @@ dissect_yami_parameter(tvbuff_t *tvb, proto_tree *tree, int offset, proto_item *
repr = bytes_to_str(wmem_packet_scope(), val, val_len);
proto_item_append_text(ti, "%s, ", repr);
- offset += (val_len + 3) & ~3;
+ offset += WS_ROUNDUP_4(val_len);
proto_tree_add_bytes_format_value(yami_param, &hfi_yami_param_value_bin, tvb, val_offset, offset - val_offset, val, "%s", repr);
}
proto_item_append_text(ti, "}");
diff --git a/wiretap/pcapng.c b/wiretap/pcapng.c
index af844827f4..5eb8c435b9 100644
--- a/wiretap/pcapng.c
+++ b/wiretap/pcapng.c
@@ -27,6 +27,7 @@
#include <wsutil/strtoi.h>
#include <wsutil/glib-compat.h>
#include <wsutil/ws_assert.h>
+#include <wsutil/ws_roundup.h>
#include "wtap-int.h"
#include "file_wrappers.h"
@@ -37,7 +38,7 @@
#include "pcapng_module.h"
#include "secrets-types.h"
-#define ROUND_TO_4BYTE(len) ((len + 3) & ~3)
+#define ROUND_TO_4BYTE(len) WS_ROUNDUP_4(len)
static gboolean
pcapng_read(wtap *wth, wtap_rec *rec, Buffer *buf, int *err,
diff --git a/wiretap/snoop.c b/wiretap/snoop.c
index 89de11c32b..e5a9d966e0 100644
--- a/wiretap/snoop.c
+++ b/wiretap/snoop.c
@@ -14,6 +14,7 @@
#include "atm.h"
#include "snoop.h"
#include <wsutil/802_11-utils.h>
+#include <wsutil/ws_roundup.h>
/* See RFC 1761 for a description of the "snoop" file format. */
@@ -891,7 +892,7 @@ static gboolean snoop_dump(wtap_dumper *wdh,
/* ... plus enough bytes to pad it to a 4-byte boundary. */
- padlen = ((reclen + 3) & ~3) - reclen;
+ padlen = WS_ROUNDUP_4(reclen) - reclen;
reclen += padlen;
/* Don't write anything we're not willing to read. */
diff --git a/wsutil/CMakeLists.txt b/wsutil/CMakeLists.txt
index d08dba497f..f26674f603 100644
--- a/wsutil/CMakeLists.txt
+++ b/wsutil/CMakeLists.txt
@@ -71,6 +71,7 @@ set(WSUTIL_PUBLIC_HEADERS
ws_mempbrk.h
ws_mempbrk_int.h
ws_pipe.h
+ ws_roundup.h
wsjson.h
wslog.h
xtea.h
diff --git a/wsutil/ws_roundup.h b/wsutil/ws_roundup.h
new file mode 100644
index 0000000000..62b21628c6
--- /dev/null
+++ b/wsutil/ws_roundup.h
@@ -0,0 +1,22 @@
+/* ws_roundup.h
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#ifndef __WS_ROUNDUP_H__
+#define __WS_ROUNDUP_H__
+
+/*
+ * Round up to various powers of 2.
+ */
+#define WS_ROUNDUP_2(n) (((n) + ((guint)(2U-1U))) & (~((guint)(2U-1U))))
+#define WS_ROUNDUP_4(n) (((n) + ((guint)(4U-1U))) & (~((guint)(4U-1U))))
+#define WS_ROUNDUP_8(n) (((n) + ((guint)(8U-1U))) & (~((guint)(8U-1U))))
+#define WS_ROUNDUP_16(n) (((n) + ((guint)(16U-1U))) & (~((guint)(16U-1U))))
+#define WS_ROUNDUP_32(n) (((n) + ((guint)(32U-1U))) & (~((guint)(32U-1U))))
+
+#endif /* __WS_ROUNDUP_H__ */