am 6db29a92: am f828f43f: am 38cf068c: am 16ac8ad7: am 4a6ca672: Make Bitmap_createFromParcel check the color count. DO NOT MERGE

* commit '6db29a92452c2a837528d20d024dcacefd450c17':
  Make Bitmap_createFromParcel check the color count. DO NOT MERGE
This commit is contained in:
Leon Scroggins III
2015-04-24 17:54:50 +00:00
committed by Android Git Automerger

View File

@@ -574,24 +574,33 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) {
return NULL; return NULL;
} }
SkBitmap* bitmap = new SkBitmap; SkAutoTDelete<SkBitmap> bitmap(new SkBitmap);
bitmap->setInfo(SkImageInfo::Make(width, height, colorType, alphaType), rowBytes); if (!bitmap->setInfo(SkImageInfo::Make(width, height, colorType, alphaType), rowBytes)) {
return NULL;
}
SkColorTable* ctable = NULL; SkColorTable* ctable = NULL;
if (colorType == kIndex_8_SkColorType) { if (colorType == kIndex_8_SkColorType) {
int count = p->readInt32(); int count = p->readInt32();
if (count < 0 || count > 256) {
// The data is corrupt, since SkColorTable enforces a value between 0 and 256,
// inclusive.
return NULL;
}
if (count > 0) { if (count > 0) {
size_t size = count * sizeof(SkPMColor); size_t size = count * sizeof(SkPMColor);
const SkPMColor* src = (const SkPMColor*)p->readInplace(size); const SkPMColor* src = (const SkPMColor*)p->readInplace(size);
if (src == NULL) {
return NULL;
}
ctable = new SkColorTable(src, count); ctable = new SkColorTable(src, count);
} }
} }
jbyteArray buffer = GraphicsJNI::allocateJavaPixelRef(env, bitmap, ctable); jbyteArray buffer = GraphicsJNI::allocateJavaPixelRef(env, bitmap.get(), ctable);
if (NULL == buffer) { if (NULL == buffer) {
SkSafeUnref(ctable); SkSafeUnref(ctable);
delete bitmap;
return NULL; return NULL;
} }
@@ -603,7 +612,6 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) {
android::status_t status = p->readBlob(size, &blob); android::status_t status = p->readBlob(size, &blob);
if (status) { if (status) {
doThrowRE(env, "Could not read bitmap from parcel blob."); doThrowRE(env, "Could not read bitmap from parcel blob.");
delete bitmap;
return NULL; return NULL;
} }
@@ -613,8 +621,8 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) {
blob.release(); blob.release();
return GraphicsJNI::createBitmap(env, bitmap, buffer, getPremulBitmapCreateFlags(isMutable), return GraphicsJNI::createBitmap(env, bitmap.detach(), buffer,
NULL, NULL, density); getPremulBitmapCreateFlags(isMutable), NULL, NULL, density);
} }
static jboolean Bitmap_writeToParcel(JNIEnv* env, jobject, static jboolean Bitmap_writeToParcel(JNIEnv* env, jobject,