images bigger then 32k no longer crash blender, use unsigned int for image size rathe...
authorCampbell Barton <ideasman42@gmail.com>
Tue, 28 Sep 2010 10:03:56 +0000 (10:03 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Tue, 28 Sep 2010 10:03:56 +0000 (10:03 +0000)
also check if jpeg fails to allocate an imbuf.

source/blender/blenkernel/BKE_image.h
source/blender/blenkernel/intern/constraint.c
source/blender/blenkernel/intern/image.c
source/blender/editors/transform/transform_snap.c
source/blender/imbuf/IMB_imbuf.h
source/blender/imbuf/IMB_imbuf_types.h
source/blender/imbuf/intern/allocimbuf.c
source/blender/imbuf/intern/jpeg.c
source/blender/imbuf/intern/scaling.c

index e246b51af0982e4eb87d93d8cc05b046e425a0be..0a07e6d482c533459110beb0afafcccc96bffde6 100644 (file)
@@ -115,7 +115,7 @@ void BKE_image_release_ibuf(struct Image *ima, void *lock);
 struct Image *BKE_add_image_file(const char *name, int frame);
 
 /* adds image, adds ibuf, generates color or pattern */
-struct Image *BKE_add_image_size(int width, int height, char *name, int depth, int floatbuf, short uvtestgrid, float color[4]);
+struct Image *BKE_add_image_size(unsigned int width, unsigned int height, char *name, int depth, int floatbuf, short uvtestgrid, float color[4]);
 /* adds image from imbuf, owns imbuf */
 struct Image *BKE_add_image_imbuf(struct ImBuf *ibuf);
 
index 59e81293c9f4f045e110dc57e4f9ab792e4e19ad..fe69f13bbdae338ed0ed40f940fb71e0d20bd59c 100644 (file)
@@ -4358,8 +4358,7 @@ void get_constraint_target_matrix (struct Scene *scene, bConstraint *con, int n,
 void solve_constraints (ListBase *conlist, bConstraintOb *cob, float ctime)
 {
        bConstraint *con;
-       float solution[4][4], delta[4][4];
-       float oldmat[4][4], imat[4][4];
+       float oldmat[4][4];
        float enf;
 
        /* check that there is a valid constraint object to evaluate */
index a199c1cf738519c8be230d40d00e24413e17e79c..cb2261932ce1a0be43fc583d2d4f8e8cf1d93186 100644 (file)
@@ -382,7 +382,7 @@ Image *BKE_add_image_file(const char *name, int frame)
        return ima;
 }
 
-static ImBuf *add_ibuf_size(int width, int height, char *name, int depth, int floatbuf, short uvtestgrid, float color[4])
+static ImBuf *add_ibuf_size(unsigned int width, unsigned int height, char *name, int depth, int floatbuf, short uvtestgrid, float color[4])
 {
        ImBuf *ibuf;
        unsigned char *rect= NULL;
@@ -415,7 +415,7 @@ static ImBuf *add_ibuf_size(int width, int height, char *name, int depth, int fl
 }
 
 /* adds new image block, creates ImBuf and initializes color */
-Image *BKE_add_image_size(int width, int height, char *name, int depth, int floatbuf, short uvtestgrid, float color[4])
+Image *BKE_add_image_size(unsigned int width, unsigned int height, char *name, int depth, int floatbuf, short uvtestgrid, float color[4])
 {
        /* on save, type is changed to FILE in editsima.c */
        Image *ima= image_alloc(name, IMA_SRC_GENERATED, IMA_TYPE_UV_TEST);
index 778698d3060bb891ac414385a41d7cd482b9c329..93331dd0ee395b58883270dfc8de99d992403c67 100644 (file)
@@ -141,15 +141,14 @@ void drawSnapping(const struct bContext *C, TransInfo *t)
                        TransSnapPoint *p;
                        View3D *v3d = CTX_wm_view3d(C);
                        RegionView3D *rv3d = CTX_wm_region_view3d(C);
-                       float tmat[4][4], imat[4][4];
+                       float imat[4][4];
                        float size;
                        
                        glDisable(GL_DEPTH_TEST);
        
                        size = 0.5f * UI_GetThemeValuef(TH_VERTEX_SIZE);
-                       
-                       copy_m4_m4(tmat, rv3d->viewmat);
-                       invert_m4_m4(imat, tmat);
+
+                       invert_m4_m4(imat, rv3d->viewmat);
 
                        for (p = t->tsnap.points.first; p; p = p->next) {
                                drawcircball(GL_LINE_LOOP, p->co, size * get_drawsize(t->ar, p->co), imat);
index c39c5d31f804c4853a91159304c367f17e936406..d8c7be06aa146846572f2d82fd63733f9f93fae6 100644 (file)
@@ -117,7 +117,7 @@ void IMB_freeImBuf(struct ImBuf *ibuf);
  *
  * @attention Defined in allocimbuf.c
  */
-struct ImBuf *IMB_allocImBuf(short x, short y,
+struct ImBuf *IMB_allocImBuf(unsigned int x, unsigned int y,
                                                 unsigned char d, unsigned int flags,
                                                 unsigned char bitmap);
 
@@ -272,13 +272,13 @@ struct ImBuf *IMB_onehalf(struct ImBuf *ibuf1);
  *
  * @attention Defined in scaling.c
  */
-struct ImBuf *IMB_scaleImBuf(struct ImBuf *ibuf, short newx, short newy);
+struct ImBuf *IMB_scaleImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int newy);
 
 /**
  *
  * @attention Defined in scaling.c
  */
-struct ImBuf *IMB_scalefastImBuf(struct ImBuf *ibuf, short newx, short newy);
+struct ImBuf *IMB_scalefastImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int newy);
 
 /**
  *
index 203a7268581d914d079b9aa9ef6e0f4e6e339d28..5fbdcf95f134dcbde2c4bb7bebffa3a2dd777eb6 100644 (file)
@@ -71,7 +71,7 @@ typedef struct ImBuf {
        struct ImBuf *next, *prev;      /**< allow lists of ImBufs, for caches or flipbooks */
 
        /* dimensions */
-       short x, y;                             /* width and Height of our image buffer */
+       unsigned int x, y;                              /* width and Height of our image buffer */
        unsigned char depth;    /* Active amount of bits/bitplanes */
        int channels;                   /* amount of channels in rect_float (0 = 4 channel default) */
 
index 02fc98f2d63bebdfc3872d70bf61c4d373a40c2c..e67c319e61ada838a193c30912780ef3f4eb8678 100644 (file)
@@ -324,7 +324,7 @@ short imb_addtilesImBuf(ImBuf *ibuf)
        return (ibuf->tiles != NULL);
 }
 
-ImBuf *IMB_allocImBuf(short x, short y, uchar d, unsigned int flags, uchar bitmap) /* XXX bitmap argument is deprecated */
+ImBuf *IMB_allocImBuf(unsigned int x, unsigned int y, uchar d, unsigned int flags, uchar bitmap) /* XXX bitmap argument is deprecated */
 {
        ImBuf *ibuf;
 
index 855c0bf343362cec2af09b81d20793518793c0f9..0a070646fd585f5395a056001b168e2074c9f7c4 100644 (file)
@@ -298,9 +298,11 @@ static ImBuf * ibJpegImageFromCinfo(struct jpeg_decompress_struct * cinfo, int f
                if (flags & IB_test) {
                        jpeg_abort_decompress(cinfo);
                        ibuf = IMB_allocImBuf(x, y, 8 * depth, 0, 0);
-               } else {
-                       ibuf = IMB_allocImBuf(x, y, 8 * depth, IB_rect, 0);
-
+               }
+               else if ((ibuf = IMB_allocImBuf(x, y, 8 * depth, IB_rect, 0)) == NULL) {
+                       jpeg_abort_decompress(cinfo);
+               }
+               else {
                        row_stride = cinfo->output_width * depth;
 
                        row_pointer = (*cinfo->mem->alloc_sarray) ((j_common_ptr) cinfo, JPOOL_IMAGE, row_stride, 1);
@@ -421,10 +423,12 @@ next_stamp_marker:
                }
                
                jpeg_destroy((j_common_ptr) cinfo);
-               ibuf->ftype = ibuf_ftype;
-               ibuf->profile = IB_PROFILE_SRGB;
+               if(ibuf) {
+                       ibuf->ftype = ibuf_ftype;
+                       ibuf->profile = IB_PROFILE_SRGB;
+               }
        }
-       
+
        return(ibuf);
 }
 
index 0b8dea01adadb6012428657d7bdec029cb6d1d82..4fccf5dae41356563c5ea809ed2544a484db2b67 100644 (file)
@@ -1439,7 +1439,7 @@ static void scalefast_Z_ImBuf(ImBuf *ibuf, short newx, short newy)
        }
 }
 
-struct ImBuf *IMB_scaleImBuf(struct ImBuf * ibuf, short newx, short newy)
+struct ImBuf *IMB_scaleImBuf(struct ImBuf * ibuf, unsigned int newx, unsigned int newy)
 {
        if (ibuf==NULL) return (0);
        if (ibuf->rect==NULL && ibuf->rect_float==NULL) return (ibuf);
@@ -1468,7 +1468,7 @@ struct imbufRGBA {
        float r, g, b, a;
 };
 
-struct ImBuf *IMB_scalefastImBuf(struct ImBuf *ibuf, short newx, short newy)
+struct ImBuf *IMB_scalefastImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int newy)
 {
        unsigned int *rect,*_newrect,*newrect;
        struct imbufRGBA *rectf, *_newrectf, *newrectf;