From 1384da730be980a56a3efb82723135afe04c09c7 Mon Sep 17 00:00:00 2001 From: codeanticode Date: Thu, 29 Mar 2012 21:15:48 +0000 Subject: [PATCH] Boundary checking in updatePixelsImpl() --- android/core/src/processing/core/PImage.java | 24 ++++++++++---------- core/src/processing/core/PImage.java | 23 +++++++++---------- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/android/core/src/processing/core/PImage.java b/android/core/src/processing/core/PImage.java index dad152548..549ff327f 100644 --- a/android/core/src/processing/core/PImage.java +++ b/android/core/src/processing/core/PImage.java @@ -390,22 +390,22 @@ public class PImage implements PConstants, Cloneable { int y2 = y + h; if (!modified) { - mx1 = x; - mx2 = x2; - my1 = y; - my2 = y2; + mx1 = PApplet.max(0, x); + mx2 = PApplet.min(width - 1, x2); + my1 = PApplet.max(0, y); + my2 = PApplet.min(height - 1, y2); modified = true; } else { - if (x < mx1) mx1 = x; - if (x > mx2) mx2 = x; - if (y < my1) my1 = y; + if (x < mx1) mx1 = PApplet.max(0, x); + if (x > mx2) mx2 = PApplet.min(width - 1, x); + if (y < my1) my1 = PApplet.max(0, y); if (y > my2) my2 = y; - if (x2 < mx1) mx1 = x2; - if (x2 > mx2) mx2 = x2; - if (y2 < my1) my1 = y2; - if (y2 > my2) my2 = y2; + if (x2 < mx1) mx1 = PApplet.max(0, x2); + if (x2 > mx2) mx2 = PApplet.min(width - 1, x2); + if (y2 < my1) my1 = PApplet.max(0, y2); + if (y2 > my2) my2 = PApplet.min(height - 1, y2); } } @@ -585,7 +585,7 @@ public class PImage implements PConstants, Cloneable { } else { if ((x < 0) || (y < 0) || (x >= width) || (y >= height)) return; pixels[y*width + x] = c; - updatePixelsImpl(x, y, x+1, y+1); // slow? + updatePixelsImpl(x, y, 1, 1); // slow? } } diff --git a/core/src/processing/core/PImage.java b/core/src/processing/core/PImage.java index d257e85ee..23c520b83 100644 --- a/core/src/processing/core/PImage.java +++ b/core/src/processing/core/PImage.java @@ -532,27 +532,26 @@ public class PImage implements PConstants, Cloneable { int y2 = y + h; if (!modified) { - mx1 = x; - mx2 = x2; - my1 = y; - my2 = y2; + mx1 = PApplet.max(0, x); + mx2 = PApplet.min(width - 1, x2); + my1 = PApplet.max(0, y); + my2 = PApplet.min(height - 1, y2); modified = true; } else { - if (x < mx1) mx1 = x; - if (x > mx2) mx2 = x; - if (y < my1) my1 = y; + if (x < mx1) mx1 = PApplet.max(0, x); + if (x > mx2) mx2 = PApplet.min(width - 1, x); + if (y < my1) my1 = PApplet.max(0, y); if (y > my2) my2 = y; - if (x2 < mx1) mx1 = x2; - if (x2 > mx2) mx2 = x2; - if (y2 < my1) my1 = y2; - if (y2 > my2) my2 = y2; + if (x2 < mx1) mx1 = PApplet.max(0, x2); + if (x2 > mx2) mx2 = PApplet.min(width - 1, x2); + if (y2 < my1) my1 = PApplet.max(0, y2); + if (y2 > my2) my2 = PApplet.min(height - 1, y2); } } - ////////////////////////////////////////////////////////////// // COPYING IMAGE DATA