diff libmpcodecs/ad_dk3adpcm.c @ 16965:d8755974657a

attempt to fix missing and/or broken boundary checks
author reimar
date Thu, 10 Nov 2005 20:41:11 +0000
parents 9d0b052c4f74
children 1767c271d710
line wrap: on
line diff
--- a/libmpcodecs/ad_dk3adpcm.c	Thu Nov 10 20:38:05 2005 +0000
+++ b/libmpcodecs/ad_dk3adpcm.c	Thu Nov 10 20:41:11 2005 +0000
@@ -145,7 +145,7 @@
   sum_index = input[14];
   diff_index = input[15];
 
-  while (in_ptr < block_size)
+  while (in_ptr < block_size - !decode_top_nibble_next)
 //  while (in_ptr < 2048)
   {
     // process the first predictor of the sum channel
@@ -237,7 +237,11 @@
     sh_audio->ds->ss_mul) 
       return -1; /* EOF */
 
+  if (maxlen < 2 * 4 * sh_audio->wf->nBlockAlign * 2 / 3) {
+    mp_msg(MSGT_DECAUDIO, MSGL_V, "dk3adpcm: maxlen too small in decode_audio\n");
+    return -1;
+  }
   return 2 * dk3_adpcm_decode_block(
     (unsigned short*)buf, sh_audio->a_in_buffer,
-    sh_audio->wf->nBlockAlign);
+    sh_audio->ds->ss_mul);
 }