From 26dda2ba780dfaed717645f1ac389baa1da5abbe Mon Sep 17 00:00:00 2001 From: John Thacker Date: Wed, 23 Nov 2022 07:44:55 -0500 Subject: H264, H265: Fix overflow value of se(v) For signed exponential Golomb, fix a typo when testing if value was even or odd that resulted in a no-op. This was mapping all overflows to G_MININT32 instead of half of them to G_MAXINT32. --- epan/dissectors/packet-h264.c | 6 +++--- epan/dissectors/packet-h265.c | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/epan/dissectors/packet-h264.c b/epan/dissectors/packet-h264.c index b12366c0e8..452bc8cc5c 100644 --- a/epan/dissectors/packet-h264.c +++ b/epan/dissectors/packet-h264.c @@ -688,8 +688,8 @@ dissect_h264_exp_golomb_code(proto_tree *tree, int hf_index, tvbuff_t *tvb, gint overflow = TRUE; codenum = G_MAXUINT32; if (descriptor == H264_SE_V) { - value = tvb_get_bits32(tvb, bit_offset + leading_zero_bits / 32, leading_zero_bits % 32, ENC_BIG_ENDIAN); - if (value % 1) { + value = tvb_get_bits32(tvb, bit_offset + 32*(leading_zero_bits / 32), leading_zero_bits % 32, ENC_BIG_ENDIAN); + if (value % 2) { se_value = G_MININT32; } else { se_value = G_MAXINT32; @@ -705,7 +705,7 @@ dissect_h264_exp_golomb_code(proto_tree *tree, int hf_index, tvbuff_t *tvb, gint if (value != 1) { overflow = TRUE; } - if (value % 1) { + if (value % 2) { se_value = G_MININT32; } else { se_value = G_MAXINT32; diff --git a/epan/dissectors/packet-h265.c b/epan/dissectors/packet-h265.c index ebb2a13309..53f4db7785 100644 --- a/epan/dissectors/packet-h265.c +++ b/epan/dissectors/packet-h265.c @@ -937,8 +937,8 @@ dissect_h265_exp_golomb_code(proto_tree *tree, int hf_index, tvbuff_t *tvb, pack codenum = G_MAXUINT32; if (descriptor == H265_SE_V) { /* For signed, must read the last bit to get the sign. */ - value = tvb_get_bits32(tvb, bit_offset + leading_zero_bits / 32, leading_zero_bits % 32, ENC_BIG_ENDIAN); - if (value % 1) { + value = tvb_get_bits32(tvb, bit_offset + 32*(leading_zero_bits / 32), leading_zero_bits % 32, ENC_BIG_ENDIAN); + if (value % 2) { se_value = G_MININT32; } else { se_value = G_MAXINT32; @@ -954,7 +954,7 @@ dissect_h265_exp_golomb_code(proto_tree *tree, int hf_index, tvbuff_t *tvb, pack if (value != 1) { overflow = TRUE; } - if (value % 1) { + if (value % 2) { se_value = G_MININT32; } else { se_value = G_MAXINT32; -- cgit v1.2.3