From 678cc7fe9fef00fb3381e64f95cc6907796bcd8e Mon Sep 17 00:00:00 2001 From: Jason Sams Date: Wed, 5 Mar 2014 16:09:02 -0800 Subject: Validate objects are from the correct context. Change-Id: I7d87b0e253b8d2e36d1aed790cfe3a7dd23e158f --- rs/java/android/renderscript/RenderScript.java | 8 ++++++++ rs/java/android/renderscript/Script.java | 9 +++++++++ 2 files changed, 17 insertions(+) (limited to 'rs') diff --git a/rs/java/android/renderscript/RenderScript.java b/rs/java/android/renderscript/RenderScript.java index 7db331f..eebeaa4 100644 --- a/rs/java/android/renderscript/RenderScript.java +++ b/rs/java/android/renderscript/RenderScript.java @@ -1004,6 +1004,14 @@ public class RenderScript { } } + void validateObject(BaseObj o) { + if (o != null) { + if (o.mRS != this) { + throw new RSIllegalArgumentException("Attempting to use an object across contexts."); + } + } + } + void validate() { if (mContext == 0) { throw new RSInvalidStateException("Calling RS with no Context active."); diff --git a/rs/java/android/renderscript/Script.java b/rs/java/android/renderscript/Script.java index a1f2287..0e46f94 100644 --- a/rs/java/android/renderscript/Script.java +++ b/rs/java/android/renderscript/Script.java @@ -128,6 +128,9 @@ public class Script extends BaseObj { * */ protected void forEach(int slot, Allocation ain, Allocation aout, FieldPacker v) { + mRS.validate(); + mRS.validateObject(ain); + mRS.validateObject(aout); if (ain == null && aout == null) { throw new RSIllegalArgumentException( "At least one of ain or aout is required to be non-null."); @@ -152,6 +155,9 @@ public class Script extends BaseObj { * */ protected void forEach(int slot, Allocation ain, Allocation aout, FieldPacker v, LaunchOptions sc) { + mRS.validate(); + mRS.validateObject(ain); + mRS.validateObject(aout); if (ain == null && aout == null) { throw new RSIllegalArgumentException( "At least one of ain or aout is required to be non-null."); @@ -187,6 +193,7 @@ public class Script extends BaseObj { */ public void bindAllocation(Allocation va, int slot) { mRS.validate(); + mRS.validateObject(va); if (va != null) { if (mRS.getApplicationContext().getApplicationInfo().targetSdkVersion >= 20) { final Type t = va.mType; @@ -263,6 +270,8 @@ public class Script extends BaseObj { * */ public void setVar(int index, BaseObj o) { + mRS.validate(); + mRS.validateObject(o); mRS.nScriptSetVarObj(getID(mRS), index, (o == null) ? 0 : o.getID(mRS)); } -- cgit v1.1