From e27832acc083fa889e86b4c629b6aedd8855ceca Mon Sep 17 00:00:00 2001 From: Stephen Hines Date: Thu, 2 Jun 2011 19:36:41 -0700 Subject: [PATCH] Improve validation in RS FieldPacker. Change-Id: I9f6a58048129db4978c893c2dc591b0ed825d05f --- .../java/android/renderscript/FieldPacker.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/graphics/java/android/renderscript/FieldPacker.java b/graphics/java/android/renderscript/FieldPacker.java index bdda8305e2ed8..6487623a0bb42 100644 --- a/graphics/java/android/renderscript/FieldPacker.java +++ b/graphics/java/android/renderscript/FieldPacker.java @@ -25,10 +25,15 @@ package android.renderscript; public class FieldPacker { public FieldPacker(int len) { mPos = 0; + mLen = len; mData = new byte[len]; } public void align(int v) { + if ((v <= 0) || ((v & (v - 1)) != 0)) { + throw new RSIllegalArgumentException("argument must be a non-negative non-zero power of 2: " + v); + } + while ((mPos & (v - 1)) != 0) { mData[mPos++] = 0; } @@ -38,11 +43,18 @@ public class FieldPacker { mPos = 0; } public void reset(int i) { + if ((i < 0) || (i >= mLen)) { + throw new RSIllegalArgumentException("out of range argument: " + i); + } mPos = i; } public void skip(int i) { - mPos += i; + int res = mPos + i; + if ((res < 0) || (res >= mLen)) { + throw new RSIllegalArgumentException("out of range argument: " + i); + } + mPos = res; } public void addI8(byte v) { @@ -277,6 +289,7 @@ public class FieldPacker { private final byte mData[]; private int mPos; + private int mLen; }