summaryrefslogtreecommitdiffstats
path: root/external/libjpeg-turbo/ubsan.patch
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--external/libjpeg-turbo/ubsan.patch39
1 files changed, 39 insertions, 0 deletions
diff --git a/external/libjpeg-turbo/ubsan.patch b/external/libjpeg-turbo/ubsan.patch
new file mode 100644
index 000000000..33d3c15a8
--- /dev/null
+++ b/external/libjpeg-turbo/ubsan.patch
@@ -0,0 +1,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)