shithub: opus

Download patch

ref: 71a26567687318d702f7972676faffafe91efa0a
parent: d490fbf50a6060a78e3304e354718f0a0d4b2e83
author: Jean-Marc Valin <jmvalin@amazon.com>
date: Fri Oct 29 22:35:06 EDT 2021

Fix potential overflow in training data for large signals

--- a/dnn/dump_data.c
+++ b/dnn/dump_data.c
@@ -74,7 +74,14 @@
   }
 }
 
+static short float2short(float x)
+{
+  int i;
+  i = (int)floor(.5+x);
+  return IMAX(-32767, IMIN(32767, i));
+}
 
+
 void write_audio(LPCNetEncState *st, const short *pcm, const int *noise, FILE *file, int nframes) {
   int i, k;
   for (k=0;k<nframes;k++) {
@@ -86,7 +93,7 @@
     for (j=0;j<LPC_ORDER;j++) p -= st->features[k][NB_BANDS+2+j]*st->sig_mem[j];
     e = lin2ulaw(pcm[k*FRAME_SIZE+i] - p);
     /* Signal in. */
-    data[2*i] = st->sig_mem[0];
+    data[2*i] = float2short(st->sig_mem[0]);
     /* Signal out. */
     data[2*i+1] = pcm[k*FRAME_SIZE+i];
     /* Simulate error on excitation. */
@@ -99,13 +106,6 @@
   }
   fwrite(data, 4*FRAME_SIZE, 1, file);
   }
-}
-
-static short float2short(float x)
-{
-  int i;
-  i = (int)floor(.5+x);
-  return IMAX(-32767, IMIN(32767, i));
 }
 
 int main(int argc, char **argv) {
--