summaryrefslogtreecommitdiffstats
path: root/external/libjpeg-turbo/ubsan.patch
blob: 33d3c15a8b3cbcf9d663e58131cebd92c958c6dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
--- jcphuff.c
+++ jcphuff.c
@@ -14,6 +14,7 @@
  * suspension.
  */
 
+#include <stdint.h>
 #define JPEG_INTERNALS
 #include "jinclude.h"
 #include "jpeglib.h"
@@ -255,7 +256,7 @@
     if (c == 0xFF) {            /* need to stuff a zero byte? */
       emit_byte(entropy, 0);
     }
-    put_buffer <<= 8;
+    put_buffer = (uint_least32_t) put_buffer << 8;
     put_bits -= 8;
   }
 
--- jdarith.c
+++ jdarith.c
@@ -306,7 +306,7 @@
       while (m >>= 1)
         if (arith_decode(cinfo, st)) v |= m;
       v += 1; if (sign) v = -v;
-      entropy->last_dc_val[ci] += v;
+      entropy->last_dc_val[ci] = (entropy->last_dc_val[ci] + v) & 0xffff;
     }
 
     /* Scale and output the DC coefficient (assumes jpeg_natural_order[0]=0) */
@@ -564,7 +564,7 @@
       while (m >>= 1)
         if (arith_decode(cinfo, st)) v |= m;
       v += 1; if (sign) v = -v;
-      entropy->last_dc_val[ci] += v;
+      entropy->last_dc_val[ci] = (entropy->last_dc_val[ci] + v) & 0xffff;
     }
 
     if (block)