Commit: d097d35be6df2f109839dde4bbc35a31f69faf89
Author: Jesse Yurkovich
Date:   Sun Jul 18 10:42:52 2021 +1000
Branches: blender-v2.93-release
https://developer.blender.org/rBd097d35be6df2f109839dde4bbc35a31f69faf89

Fix T89868: Crash showing thumbnail of wide-aspect image

Scaling down images could create images with a width or height of zero.

Clamp at 1 to prevent a crash, also add an assert to scaling functions.

Ref D11956

===================================================================

M       source/blender/editors/render/render_preview.c
M       source/blender/imbuf/intern/scaling.c

===================================================================

diff --git a/source/blender/editors/render/render_preview.c 
b/source/blender/editors/render/render_preview.c
index 10e0a143d9b..23b3886ec46 100644
--- a/source/blender/editors/render/render_preview.c
+++ b/source/blender/editors/render/render_preview.c
@@ -1254,8 +1254,9 @@ static void icon_copy_rect(ImBuf *ibuf, uint w, uint h, 
uint *rect)
     scaledy = (float)h;
   }
 
-  ex = (short)scaledx;
-  ey = (short)scaledy;
+  /* Scaling down must never assign zero width/height, see: T89868. */
+  ex = MAX2(1, (short)scaledx);
+  ey = MAX2(1, (short)scaledy);
 
   dx = (w - ex) / 2;
   dy = (h - ey) / 2;
diff --git a/source/blender/imbuf/intern/scaling.c 
b/source/blender/imbuf/intern/scaling.c
index 4a964c64917..72561ef1502 100644
--- a/source/blender/imbuf/intern/scaling.c
+++ b/source/blender/imbuf/intern/scaling.c
@@ -1620,6 +1620,8 @@ static void scalefast_Z_ImBuf(ImBuf *ibuf, int newx, int 
newy)
  */
 bool IMB_scaleImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int newy)
 {
+  BLI_assert(newx > 0 && newy > 0);
+
   if (ibuf == NULL) {
     return false;
   }
@@ -1666,6 +1668,8 @@ struct imbufRGBA {
  */
 bool IMB_scalefastImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int 
newy)
 {
+  BLI_assert(newx > 0 && newy > 0);
+
   unsigned int *rect, *_newrect, *newrect;
   struct imbufRGBA *rectf, *_newrectf, *newrectf;
   int x, y;
@@ -1838,6 +1842,8 @@ static void *do_scale_thread(void *data_v)
 
 void IMB_scaleImBuf_threaded(ImBuf *ibuf, unsigned int newx, unsigned int newy)
 {
+  BLI_assert(newx > 0 && newy > 0);
+
   ScaleTreadInitData init_data = {NULL};
 
   /* prepare initialization data */

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to