changeset 18068:c34ffa6f5fa8

10l, we should really, really use lzo1x_decompress_safe instead of lzo1x_decompress
author reimar
date Sun, 09 Apr 2006 18:25:35 +0000
parents ac7eaa0313c2
children b644dfdeda48
files libmpcodecs/native/nuppelvideo.c libmpcodecs/vd_lzo.c
diffstat 2 files changed, 10 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- 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");
--- 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,