# HG changeset patch # User reimar # Date 1144607135 0 # Node ID c34ffa6f5fa84df5f846a2dfb3a739fb44e6129f # Parent ac7eaa0313c224960abb9f3ef660ec72738372e8 10l, we should really, really use lzo1x_decompress_safe instead of lzo1x_decompress diff -r ac7eaa0313c2 -r c34ffa6f5fa8 libmpcodecs/native/nuppelvideo.c --- a/libmpcodecs/native/nuppelvideo.c Sun Apr 09 18:16:29 2006 +0000 +++ b/libmpcodecs/native/nuppelvideo.c Sun Apr 09 18:25:35 2006 +0000 @@ -27,7 +27,7 @@ unsigned char *decoded, int width, int height) { int r; - unsigned int out_len; + unsigned int out_len = width * height + ( width * height ) / 2; struct rtframeheader *encodedh = ( struct rtframeheader* ) encoded; static unsigned char *buffer = 0; /* for RTJpeg with LZO decompress */ #ifdef KEEP_BUFFER @@ -56,7 +56,7 @@ { #ifdef KEEP_BUFFER if (!previous_buffer) - previous_buffer = ( unsigned char * ) malloc ( width * height + ( width * height ) / 2 ); + previous_buffer = ( unsigned char * ) malloc ( out_len ); #endif if (((encodedh->comptype == '2') || @@ -74,20 +74,20 @@ switch(encodedh->comptype) { case '0': /* raw YUV420 */ - memcpy(decoded, encoded + 12, width*height*3/2); + memcpy(decoded, encoded + 12, out_len); break; case '1': /* RTJpeg */ RTjpeg_decompressYUV420 ( ( __s8 * ) encoded + 12, decoded ); break; case '2': /* RTJpeg with LZO */ if (!buffer) - buffer = ( unsigned char * ) malloc ( width * height + ( width * height ) / 2 ); + buffer = ( unsigned char * ) malloc ( out_len ); if (!buffer) { mp_msg(MSGT_DECVIDEO, MSGL_ERR, "Nuppelvideo: error decompressing\n"); break; } - r = lzo1x_decompress ( encoded + 12, encodedh->packetlength, buffer, &out_len, NULL ); + r = lzo1x_decompress_safe ( encoded + 12, encodedh->packetlength, buffer, &out_len, NULL ); if ( r != LZO_E_OK ) { mp_msg(MSGT_DECVIDEO, MSGL_ERR, "Nuppelvideo: error decompressing\n"); @@ -96,7 +96,7 @@ RTjpeg_decompressYUV420 ( ( __s8 * ) buffer, decoded ); break; case '3': /* raw YUV420 with LZO */ - r = lzo1x_decompress ( encoded + 12, encodedh->packetlength, decoded, &out_len, NULL ); + r = lzo1x_decompress_safe ( encoded + 12, encodedh->packetlength, decoded, &out_len, NULL ); if ( r != LZO_E_OK ) { mp_msg(MSGT_DECVIDEO, MSGL_ERR, "Nuppelvideo: error decompressing\n"); diff -r ac7eaa0313c2 -r c34ffa6f5fa8 libmpcodecs/vd_lzo.c --- a/libmpcodecs/vd_lzo.c Sun Apr 09 18:16:29 2006 +0000 +++ b/libmpcodecs/vd_lzo.c Sun Apr 09 18:25:35 2006 +0000 @@ -119,7 +119,8 @@ ); /* decompress the frame */ - r = lzo1x_decompress (data, len, tmp, &w, priv->wrkmem); + w = sh->bih->biSizeImage; + r = lzo1x_decompress_safe (data, len, tmp, &w, priv->wrkmem); free(tmp); if (r != LZO_E_OK) { @@ -154,7 +155,8 @@ return NULL; } - r = lzo1x_decompress (data, len, mpi->planes[0], &w, priv->wrkmem); + w = mpi->w * mpi->h; + r = lzo1x_decompress_safe (data, len, mpi->planes[0], &w, priv->wrkmem); if (r != LZO_E_OK) { /* this should NEVER happen */ mp_msg (MSGT_DECVIDEO, MSGL_ERR,