diff options
author | John Thacker <johnthacker@gmail.com> | 2022-11-23 07:44:55 -0500 |
---|---|---|
committer | John Thacker <johnthacker@gmail.com> | 2022-11-23 14:47:01 +0000 |
commit | 26dda2ba780dfaed717645f1ac389baa1da5abbe (patch) | |
tree | 8a840380913698d061235d807b011735cef840c0 /epan/dissectors | |
parent | e6d81e8731c689ee2dce20b7417e3b41c4e1bd8f (diff) |
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.
Diffstat (limited to 'epan/dissectors')
-rw-r--r-- | epan/dissectors/packet-h264.c | 6 | ||||
-rw-r--r-- | 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; |