Merge "Tremolo: Fix integer overflows in codebook.c"
diff --git a/Tremolo/codebook.c b/Tremolo/codebook.c
index 2fbb392..8e7d4eb 100644
--- a/Tremolo/codebook.c
+++ b/Tremolo/codebook.c
@@ -858,8 +858,11 @@
 
     for (j=0;j<step;j++){
       if(decode_map(book,b,v,point))return -1;
-      for(i=0,o=j;i<book->dim;i++,o+=step)
-        a[o]+=v[i];
+      for(i=0,o=j;i<book->dim;i++,o+=step){
+        if (__builtin_add_overflow(a[o], v[i], &a[o])){
+           a[o] = v[i] > 0 ? INT32_MAX : INT32_MIN;
+        }
+      }
     }
   }
   return 0;
@@ -926,7 +929,10 @@
     for(i=offset;i<offset+n;){
       if(decode_map(book,b,v,point))return -1;
       for (j=0;j<book->dim && i < offset + n;j++){
-        a[chptr++][i]+=v[j];
+        if (__builtin_add_overflow(a[chptr][i], v[j], &a[chptr][i])) {
+           a[chptr][i] = v[j] > 0 ? INT32_MAX : INT32_MIN;
+        }
+        chptr++;
         if(chptr==ch){
           chptr=0;
           i++;