am 4a6ca672: Make Bitmap_createFromParcel check the color count. DO NOT MERGE
* commit '4a6ca6724c789603626d74a8cc187365788a6cfd': Make Bitmap_createFromParcel check the color count. DO NOT MERGE
This commit is contained in:
@@ -575,24 +575,33 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) {
|
||||
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;
|
||||
if (colorType == kIndex_8_SkColorType) {
|
||||
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) {
|
||||
size_t size = count * sizeof(SkPMColor);
|
||||
const SkPMColor* src = (const SkPMColor*)p->readInplace(size);
|
||||
if (src == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
ctable = new SkColorTable(src, count);
|
||||
}
|
||||
}
|
||||
|
||||
jbyteArray buffer = GraphicsJNI::allocateJavaPixelRef(env, bitmap, ctable);
|
||||
jbyteArray buffer = GraphicsJNI::allocateJavaPixelRef(env, bitmap.get(), ctable);
|
||||
if (NULL == buffer) {
|
||||
SkSafeUnref(ctable);
|
||||
delete bitmap;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -604,7 +613,6 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) {
|
||||
android::status_t status = p->readBlob(size, &blob);
|
||||
if (status) {
|
||||
doThrowRE(env, "Could not read bitmap from parcel blob.");
|
||||
delete bitmap;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -614,8 +622,8 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) {
|
||||
|
||||
blob.release();
|
||||
|
||||
return GraphicsJNI::createBitmap(env, bitmap, buffer, getPremulBitmapCreateFlags(isMutable),
|
||||
NULL, NULL, density);
|
||||
return GraphicsJNI::createBitmap(env, bitmap.detach(), buffer,
|
||||
getPremulBitmapCreateFlags(isMutable), NULL, NULL, density);
|
||||
}
|
||||
|
||||
static jboolean Bitmap_writeToParcel(JNIEnv* env, jobject,
|
||||
|
||||
Reference in New Issue
Block a user