Fix a few memory leaks in some error conditions during image manipulation.
This commit is contained in:
		@@ -84,7 +84,6 @@ my_dst_mgr_init(j_compress_ptr cinfo)
 | 
			
		||||
	dst->jdst.free_in_buffer = dst->sz;
 | 
			
		||||
 | 
			
		||||
	return;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static boolean
 | 
			
		||||
@@ -100,7 +99,6 @@ my_dst_mgr_empty(j_compress_ptr cinfo)
 | 
			
		||||
	dst->jdst.free_in_buffer = dst->sz - dst->used;
 | 
			
		||||
 | 
			
		||||
	return TRUE;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -112,7 +110,6 @@ my_dst_mgr_term(j_compress_ptr cinfo)
 | 
			
		||||
	dst->off = dst->buf + dst->used;
 | 
			
		||||
 | 
			
		||||
	return;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@@ -124,7 +121,6 @@ jpeg_memory_dest(j_compress_ptr cinfo, struct my_dst_mgr *dst)
 | 
			
		||||
	cinfo->dest = (void *)dst;
 | 
			
		||||
 | 
			
		||||
	return;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Source manager to read data from a buffer */
 | 
			
		||||
@@ -182,10 +178,8 @@ jpeg_memory_src(j_decompress_ptr cinfo, const unsigned char * buffer, size_t buf
 | 
			
		||||
{
 | 
			
		||||
	struct my_src_mgr *src;
 | 
			
		||||
 | 
			
		||||
	if (! cinfo->src)
 | 
			
		||||
	{
 | 
			
		||||
	if (!cinfo->src)
 | 
			
		||||
		cinfo->src = (*cinfo->mem->alloc_small)((void *)cinfo, JPOOL_PERMANENT, sizeof(struct my_src_mgr));;
 | 
			
		||||
	}
 | 
			
		||||
	src = (void *)cinfo->src;
 | 
			
		||||
	src->pub.init_source = init_source;
 | 
			
		||||
	src->pub.fill_input_buffer = fill_input_buffer;
 | 
			
		||||
@@ -488,6 +482,7 @@ image_new_from_jpeg(const char *path, int is_file, const uint8_t *buf, int size,
 | 
			
		||||
	if(cinfo.rec_outbuf_height > 16)
 | 
			
		||||
	{
 | 
			
		||||
		DPRINTF(E_WARN, L_METADATA, "ERROR image_from_jpeg : (image_from_jpeg.c) JPEG uses line buffers > 16. Cannot load.\n");
 | 
			
		||||
		jpeg_destroy_decompress(&cinfo);
 | 
			
		||||
		image_free(vimage);
 | 
			
		||||
		if( is_file )
 | 
			
		||||
			fclose(file);
 | 
			
		||||
@@ -501,6 +496,7 @@ image_new_from_jpeg(const char *path, int is_file, const uint8_t *buf, int size,
 | 
			
		||||
		if((ptr = malloc(w * 3 * cinfo.rec_outbuf_height + 16)) == NULL)
 | 
			
		||||
		{
 | 
			
		||||
			DPRINTF(E_WARN, L_METADATA, "malloc failed\n");
 | 
			
		||||
			jpeg_destroy_decompress(&cinfo);
 | 
			
		||||
			image_free(vimage);
 | 
			
		||||
			if( is_file )
 | 
			
		||||
				fclose(file);
 | 
			
		||||
@@ -815,6 +811,8 @@ image_save_to_jpeg_buf(image_s * pimage, int * size)
 | 
			
		||||
	if((data = malloc(row_stride)) == NULL)
 | 
			
		||||
	{
 | 
			
		||||
		DPRINTF(E_WARN, L_METADATA, "malloc failed\n");
 | 
			
		||||
		free(dst.buf);
 | 
			
		||||
		jpeg_destroy_compress(&cinfo);
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
	i = 0;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user