[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59978] trunk/blender/source/blender/imbuf /intern/allocimbuf.c: fix [#36187] Crash loading large images

Campbell Barton ideasman42 at gmail.com
Tue Sep 10 02:53:39 CEST 2013


Revision: 59978
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59978
Author:   campbellbarton
Date:     2013-09-10 00:53:39 +0000 (Tue, 10 Sep 2013)
Log Message:
-----------
fix [#36187] Crash loading large images

alloc size was larger then an int, use size_t for all image alloc sizes.

Modified Paths:
--------------
    trunk/blender/source/blender/imbuf/intern/allocimbuf.c

Modified: trunk/blender/source/blender/imbuf/intern/allocimbuf.c
===================================================================
--- trunk/blender/source/blender/imbuf/intern/allocimbuf.c	2013-09-10 00:36:14 UTC (rev 59977)
+++ trunk/blender/source/blender/imbuf/intern/allocimbuf.c	2013-09-10 00:53:39 UTC (rev 59978)
@@ -193,14 +193,15 @@
 
 short addzbufImBuf(ImBuf *ibuf)
 {
-	int size;
+	size_t size;
 	
 	if (ibuf == NULL) return FALSE;
 	
 	IMB_freezbufImBuf(ibuf);
 	
-	size = ibuf->x * ibuf->y * sizeof(unsigned int);
-	if ((ibuf->zbuf = MEM_mapallocN(size, "addzbufImBuf"))) {
+	size = (size_t)(ibuf->x * ibuf->y) * sizeof(unsigned int);
+
+	if ((ibuf->zbuf = MEM_mapallocN(size, __func__))) {
 		ibuf->mall |= IB_zbuf;
 		ibuf->flags |= IB_zbuf;
 		return TRUE;
@@ -211,14 +212,15 @@
 
 short addzbuffloatImBuf(ImBuf *ibuf)
 {
-	int size;
+	size_t size;
 	
 	if (ibuf == NULL) return FALSE;
 	
 	IMB_freezbuffloatImBuf(ibuf);
 	
-	size = ibuf->x * ibuf->y * sizeof(float);
-	if ((ibuf->zbuf_float = MEM_mapallocN(size, "addzbuffloatImBuf"))) {
+	size = (size_t)(ibuf->x * ibuf->y) * sizeof(float);
+
+	if ((ibuf->zbuf_float = MEM_mapallocN(size, __func__))) {
 		ibuf->mall |= IB_zbuffloat;
 		ibuf->flags |= IB_zbuffloat;
 		return TRUE;
@@ -289,18 +291,17 @@
 
 short imb_addrectfloatImBuf(ImBuf *ibuf)
 {
-	int size;
+	size_t size;
 	
 	if (ibuf == NULL) return FALSE;
 	
 	if (ibuf->rect_float)
 		imb_freerectfloatImBuf(ibuf);  /* frees mipmap too, hrm */
 	
-	size = ibuf->x * ibuf->y;
-	size = size * 4 * sizeof(float);
+	size = (size_t)(ibuf->x * ibuf->y) * sizeof(float[4]);
+
 	ibuf->channels = 4;
-	
-	if ((ibuf->rect_float = MEM_mapallocN(size, "imb_addrectfloatImBuf"))) {
+	if ((ibuf->rect_float = MEM_mapallocN(size, __func__))) {
 		ibuf->mall |= IB_rectfloat;
 		ibuf->flags |= IB_rectfloat;
 		return TRUE;
@@ -312,7 +313,7 @@
 /* question; why also add zbuf? */
 short imb_addrectImBuf(ImBuf *ibuf)
 {
-	int size;
+	size_t size;
 
 	if (ibuf == NULL) return FALSE;
 	
@@ -321,10 +322,9 @@
 		MEM_freeN(ibuf->rect);
 	ibuf->rect = NULL;
 	
-	size = ibuf->x * ibuf->y;
-	size = size * sizeof(unsigned int);
+	size = (size_t)(ibuf->x * ibuf->y) * sizeof(unsigned int);
 
-	if ((ibuf->rect = MEM_mapallocN(size, "imb_addrectImBuf"))) {
+	if ((ibuf->rect = MEM_mapallocN(size, __func__))) {
 		ibuf->mall |= IB_rect;
 		ibuf->flags |= IB_rect;
 		if (ibuf->planes > 32) return (addzbufImBuf(ibuf));




More information about the Bf-blender-cvs mailing list