Added some protection against out of range values getting into golay decoder look...
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Thu, 18 Dec 2014 11:51:22 +0000 (11:51 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Thu, 18 Dec 2014 11:51:22 +0000 (11:51 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@1976 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/src/freedv_api.c
codec2-dev/src/golay23.c

index db3f72f1e34cc62f67b31cb3e7166a566d23a2c6..70258b2497dfad91026407d4cdb477c0c8af6355 100644 (file)
@@ -89,7 +89,7 @@ struct freedv *freedv_open(int mode) {
     nbit = 2*fdmdv_bits_per_frame(f->fdmdv);
     f->tx_bits = (int*)malloc(nbit*sizeof(int));
     f->rx_bits = (int*)malloc(nbit*sizeof(int));
+    
     nbit = fdmdv_bits_per_frame(f->fdmdv);
     f->fdmdv_bits = (int*)malloc(nbit*sizeof(int));
 
@@ -333,15 +333,15 @@ int freedv_floatrx(struct freedv *f, short speech_out[], float demod_in[]) {
                 recd_codeword = 0;
                 for(i=0; i<8; i++) {
                     recd_codeword <<= 1;
-                    recd_codeword |= f->rx_bits[i];
+                    recd_codeword |= (f->rx_bits[i] & 0x1);
                 }
                 for(i=11; i<15; i++) {
                     recd_codeword <<= 1;
-                    recd_codeword |= f->rx_bits[i];
+                    recd_codeword |= (f->rx_bits[i] & 0x1);
                 }
                 for(i=bits_per_codec_frame; i<bits_per_codec_frame+11; i++) {
                     recd_codeword <<= 1;
-                    recd_codeword |= f->rx_bits[i];
+                    recd_codeword |= (f->rx_bits[i] & 0x1);
                 }
                 codeword1 = golay23_decode(recd_codeword);
                 f->total_bit_errors += golay23_count_errors(recd_codeword, codeword1);
index cc6c41945f2eb0549c3946d924cd5e64f1c3132e..ada17c315d807cfb20fe1f2f9fc4fb3d9750006a 100644 (file)
@@ -6,7 +6,7 @@
 
   To test:
   
-     src$ gcc golay23.c -o golay23 -Wall -DGOLAY23_UNITTEST
+     src$ gcc golay23.c -o golay23 -Wall -DGOLAY23_UNITTEST -DRUN_TIME_TABLES
      src$ ./golay23
 
   To generate tables:
@@ -257,9 +257,9 @@ void golay23_init(void) {
 
 int golay23_encode(int data) {
     assert(inited);
+    assert(data <= 0xfff);
 
     //printf("data: 0x%x\n", data);
-    assert(data <= 0xfff);
     return encoding_table[data];
 }
 
@@ -275,6 +275,7 @@ int golay23_encode(int data) {
 
 int golay23_decode(int received_codeword) {
     assert(inited);
+    assert((received_codeword < (1<<23)) && (received_codeword >= 0));
 
     //printf("syndrome: 0x%x\n", get_syndrome(received_codeword));
     return received_codeword ^= decoding_table[get_syndrome(received_codeword)];