On 02/16/2012 04:12 PM, Ronald S. Bultje wrote: > From: "Ronald S. Bultje" <[email protected]> > > WMApro (and all wma variants) actually support 13-bits block sizes, and > thus we should support that also. Some WMA functions do not enforce the > 12-bit maximum, which causes crashes when decoding such a file because > it expects bigger buffers, which aren't there, causing overreads/writes > and all kind of bad stuff. > --- > libavcodec/sinewin.h | 3 ++- > libavcodec/sinewin_tablegen.c | 2 +- > libavcodec/sinewin_tablegen.h | 3 ++- > libavcodec/wmaprodec.c | 2 +- > 4 files changed, 6 insertions(+), 4 deletions(-) > > diff --git a/libavcodec/sinewin.h b/libavcodec/sinewin.h > index eefe5bf..8054191 100644 > --- a/libavcodec/sinewin.h > +++ b/libavcodec/sinewin.h > @@ -53,7 +53,8 @@ extern SINETABLE( 512); > extern SINETABLE(1024); > extern SINETABLE(2048); > extern SINETABLE(4096); > +extern SINETABLE(8192); > > -extern SINETABLE_CONST float * const ff_sine_windows[13]; > +extern SINETABLE_CONST float * const ff_sine_windows[14]; > > #endif /* AVCODEC_SINEWIN_H */ > diff --git a/libavcodec/sinewin_tablegen.c b/libavcodec/sinewin_tablegen.c > index 2f4d1aa..d5e0689 100644 > --- a/libavcodec/sinewin_tablegen.c > +++ b/libavcodec/sinewin_tablegen.c > @@ -38,7 +38,7 @@ int main(void) > > write_fileheader(); > > - for (i = 5; i <= 12; i++) { > + for (i = 5; i <= 13; i++) { > ff_init_ff_sine_windows(i); > printf("SINETABLE(%4i) = {\n", 1 << i); > write_float_array(ff_sine_windows[i], 1 << i); > diff --git a/libavcodec/sinewin_tablegen.h b/libavcodec/sinewin_tablegen.h > index 720f1ab..7d92026 100644 > --- a/libavcodec/sinewin_tablegen.h > +++ b/libavcodec/sinewin_tablegen.h > @@ -38,6 +38,7 @@ SINETABLE( 512); > SINETABLE(1024); > SINETABLE(2048); > SINETABLE(4096); > +SINETABLE(8192); > #else > #include "libavcodec/sinewin_tables.h" > #endif > @@ -45,7 +46,7 @@ SINETABLE(4096); > SINETABLE_CONST float * const ff_sine_windows[] = { > NULL, NULL, NULL, NULL, NULL, // unused > ff_sine_32 , ff_sine_64 , > - ff_sine_128, ff_sine_256, ff_sine_512, ff_sine_1024, ff_sine_2048, > ff_sine_4096 > + ff_sine_128, ff_sine_256, ff_sine_512, ff_sine_1024, ff_sine_2048, > ff_sine_4096, ff_sine_8192 > }; > > // Generate a sine window. > diff --git a/libavcodec/wmaprodec.c b/libavcodec/wmaprodec.c > index a1b82db..0cbba82 100644 > --- a/libavcodec/wmaprodec.c > +++ b/libavcodec/wmaprodec.c > @@ -105,7 +105,7 @@ > #define MAX_FRAMESIZE 32768 ///< maximum > compressed frame size > > #define WMAPRO_BLOCK_MIN_BITS 6 > ///< log2 of min block size > -#define WMAPRO_BLOCK_MAX_BITS 12 > ///< log2 of max block size > +#define WMAPRO_BLOCK_MAX_BITS 13 > ///< log2 of max block size > #define WMAPRO_BLOCK_MAX_SIZE (1 << WMAPRO_BLOCK_MAX_BITS) > ///< maximum block size > #define WMAPRO_BLOCK_SIZES (WMAPRO_BLOCK_MAX_BITS - WMAPRO_BLOCK_MIN_BITS > + 1) ///< possible block sizes >
LGTM. -Justin _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
