diff options
| -rw-r--r-- | src/libmpg123/layer3.c | 20 | 
1 files changed, 13 insertions, 7 deletions
| diff --git a/src/libmpg123/layer3.c b/src/libmpg123/layer3.c index d3673b57d..58c7d018a 100644 --- a/src/libmpg123/layer3.c +++ b/src/libmpg123/layer3.c @@ -292,7 +292,7 @@ void init_layer3(int down_sample_sblimit)   * read additional side information   */  #ifdef MPEG1  -static void III_get_side_info_1(struct III_sideinfo *si,int stereo, +static int III_get_side_info_1(struct III_sideinfo *si,int stereo,   int ms_stereo,long sfreq,int single)  {     int ch, gr; @@ -319,6 +319,7 @@ static void III_get_side_info_1(struct III_sideinfo *si,int stereo,         gr_info->big_values = getbits_fast(9);         if(gr_info->big_values > 288) {            fprintf(stderr,"big_values too large!\n"); +	  return 0;            gr_info->big_values = 288;         }         gr_info->pow2gain = gainpow2+256 - getbits_fast(8) + powdiff; @@ -343,7 +344,7 @@ static void III_get_side_info_1(struct III_sideinfo *si,int stereo,           if(gr_info->block_type == 0) {             fprintf(stderr,"Blocktype == 0 and window-switching == 1 not allowed.\n"); -           exit(1); +           return 0;           }           /* region_count/start parameters are implicit in this case. */                  gr_info->region1start = 36>>1; @@ -366,13 +367,14 @@ static void III_get_side_info_1(struct III_sideinfo *si,int stereo,         gr_info->count1table_select = get1bit();       }     } +   return 1;  }  #endif  /*   * Side Info for MPEG 2.0 / LSF   */ -static void III_get_side_info_2(struct III_sideinfo *si,int stereo, +static int III_get_side_info_2(struct III_sideinfo *si,int stereo,   int ms_stereo,long sfreq,int single)  {     int ch; @@ -393,6 +395,7 @@ static void III_get_side_info_2(struct III_sideinfo *si,int stereo,         if(gr_info->big_values > 288) {           fprintf(stderr,"big_values too large!\n");           gr_info->big_values = 288; +	 return 0;         }         gr_info->pow2gain = gainpow2+256 - getbits_fast(8) + powdiff;         if(ms_stereo) @@ -416,7 +419,7 @@ static void III_get_side_info_2(struct III_sideinfo *si,int stereo,           if(gr_info->block_type == 0) {             fprintf(stderr,"Blocktype == 0 and window-switching == 1 not allowed.\n"); -           exit(1); +	   return 0;           }           /* region_count/start parameters are implicit in this case. */         /* check this again! */ @@ -444,6 +447,7 @@ static void III_get_side_info_2(struct III_sideinfo *si,int stereo,         gr_info->scalefac_scale = get1bit();         gr_info->count1table_select = get1bit();     } +   return 1;  }  /* @@ -1477,12 +1481,14 @@ void do_layer3(mpgaudio_t *mp)    if(fr->lsf) {      granules = 1; -    III_get_side_info_2(&sideinfo,stereo,ms_stereo,sfreq,single); +    if (!III_get_side_info_2(&sideinfo,stereo,ms_stereo,sfreq,single)) +      return;    }    else {      granules = 2; -#ifdef MPEG1 -    III_get_side_info_1(&sideinfo,stereo,ms_stereo,sfreq,single); +#ifdef MPEG1     +    if (!III_get_side_info_1(&sideinfo,stereo,ms_stereo,sfreq,single)) +      return;  #else      fprintf(stderr,"Not supported\n");  #endif | 
