JPXStream: Replaces undefined left-shift operations.
Left-shifting a negative signed int is undefined. Most compilers shifts the same
way as unsigned ints, but it's better to be clear about it.
diff --git a/poppler/JPXStream.cc b/poppler/JPXStream.cc
index e66ebb3..9209d3e 100644
--- a/poppler/JPXStream.cc
+++ b/poppler/JPXStream.cc
@@ -2816,7 +2816,7 @@
if (shift2 > 0) {
cover(94);
if (val < 0) {
- val = (val << shift2) - (1 << (shift2 - 1));
+ val = (((unsigned int)val) << shift2) - (1 << (shift2 - 1));
} else {
val = (val << shift2) + (1 << (shift2 - 1));
}
@@ -2828,7 +2828,7 @@
cover(96);
if (tileComp->transform == 0) {
cover(97);
- val &= -1 << fracBits;
+ val &= 0xFFFFFFFF << fracBits;
}
} else {
cover(98);
@@ -2931,7 +2931,7 @@
if (shift2 > 0) {
cover(74);
if (val < 0) {
- val = (val << shift2) - (1 << (shift2 - 1));
+ val = (((unsigned int)val) << shift2) - (1 << (shift2 - 1));
} else {
val = (val << shift2) + (1 << (shift2 - 1));
}
@@ -2942,7 +2942,7 @@
if (qStyle == 0) {
cover(76);
if (tileComp->transform == 0) {
- val &= -1 << fracBits;
+ val &= 0xFFFFFFFF << fracBits;
}
} else {
cover(77);