aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Thacker <johnthacker@gmail.com>2022-11-23 07:44:55 -0500
committerJohn Thacker <johnthacker@gmail.com>2022-11-23 14:47:01 +0000
commit26dda2ba780dfaed717645f1ac389baa1da5abbe (patch)
tree8a840380913698d061235d807b011735cef840c0
parente6d81e8731c689ee2dce20b7417e3b41c4e1bd8f (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.
-rw-r--r--epan/dissectors/packet-h264.c6
-rw-r--r--epan/dissectors/packet-h265.c6
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;