From b590b354ef407c1c60288d2f8c3950d2f53d14fa Mon Sep 17 00:00:00 2001 From: Miao Wang Date: Thu, 15 Jan 2015 11:09:23 -0800 Subject: [PATCH] [Renderscript] Add check for Allocation.copyTo(Array) and Fix the input allocation type check for Histogram Intrinsic. Bug: 19035242 Change-Id: I0ef2672bf816854db90fc92dc9ef51d1d231c246 --- rs/java/android/renderscript/Allocation.java | 4 ++++ .../renderscript/ScriptIntrinsicHistogram.java | 12 ++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/rs/java/android/renderscript/Allocation.java b/rs/java/android/renderscript/Allocation.java index 3cda6de14ff55..4e895669653e6 100644 --- a/rs/java/android/renderscript/Allocation.java +++ b/rs/java/android/renderscript/Allocation.java @@ -1262,6 +1262,10 @@ public class Allocation extends BaseObj { private void copyTo(Object array, Element.DataType dt, int arrayLen) { Trace.traceBegin(RenderScript.TRACE_TAG, "copyTo"); + if (dt.mSize * arrayLen < mSize) { + throw new RSIllegalArgumentException( + "Size of output array cannot be smaller than size of allocation."); + } mRS.validate(); mRS.nAllocationRead(getID(mRS), array, dt); Trace.traceEnd(RenderScript.TRACE_TAG); diff --git a/rs/java/android/renderscript/ScriptIntrinsicHistogram.java b/rs/java/android/renderscript/ScriptIntrinsicHistogram.java index 95b610a1b5e90..4ecac99bea3c8 100644 --- a/rs/java/android/renderscript/ScriptIntrinsicHistogram.java +++ b/rs/java/android/renderscript/ScriptIntrinsicHistogram.java @@ -91,9 +91,9 @@ public final class ScriptIntrinsicHistogram extends ScriptIntrinsic { throw new RSIllegalArgumentException( "Input vector size must be >= output vector size."); } - if (ain.getType().getElement().isCompatible(Element.U8(mRS)) && - ain.getType().getElement().isCompatible(Element.U8_4(mRS))) { - throw new RSIllegalArgumentException("Output type must be U32 or I32."); + if (!ain.getType().getElement().isCompatible(Element.U8(mRS)) && + !ain.getType().getElement().isCompatible(Element.U8_4(mRS))) { + throw new RSIllegalArgumentException("Input type must be U8 or U8_4."); } forEach(0, ain, null, null, opt); @@ -187,9 +187,9 @@ public final class ScriptIntrinsicHistogram extends ScriptIntrinsic { if (mOut.getType().getElement().getVectorSize() != 1) { throw new RSIllegalArgumentException("Output vector size must be one."); } - if (ain.getType().getElement().isCompatible(Element.U8(mRS)) && - ain.getType().getElement().isCompatible(Element.U8_4(mRS))) { - throw new RSIllegalArgumentException("Output type must be U32 or I32."); + if (!ain.getType().getElement().isCompatible(Element.U8(mRS)) && + !ain.getType().getElement().isCompatible(Element.U8_4(mRS))) { + throw new RSIllegalArgumentException("Input type must be U8 or U8_4."); } forEach(1, ain, null, null, opt);