summaryrefslogtreecommitdiffstats
path: root/core/jni/android/graphics
diff options
context:
space:
mode:
authorMichal Stawinski <michal.stawinski@sonymobile.com>2012-07-08 12:25:45 +0200
committerJohan Redestig <johan.redestig@sonymobile.com>2012-08-29 15:54:01 +0200
commit35ef567140e42f354be4a98cce6a7666ac085c13 (patch)
tree9b13028068290e1e4212e832cebc990f95624fc8 /core/jni/android/graphics
parentad955fe87f44b43dbb2842fdcbe4e62900b5a07f (diff)
downloadframeworks_base-35ef567140e42f354be4a98cce6a7666ac085c13.zip
frameworks_base-35ef567140e42f354be4a98cce6a7666ac085c13.tar.gz
frameworks_base-35ef567140e42f354be4a98cce6a7666ac085c13.tar.bz2
Fix SkBitmap::fPixels not being locked correctly
In some cases bitmap's pixels where freed during encoding, which caused a null pointer dereference. This fix makes sure that underlaying buffer is locked for the whole process of compression. Change-Id: I0ac56821f5d333072271dc2670fa30f1562adfa3
Diffstat (limited to 'core/jni/android/graphics')
-rw-r--r--core/jni/android/graphics/Bitmap.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp
index 3c27caf..1bba5b4 100644
--- a/core/jni/android/graphics/Bitmap.cpp
+++ b/core/jni/android/graphics/Bitmap.cpp
@@ -298,8 +298,18 @@ static bool Bitmap_compress(JNIEnv* env, jobject clazz, SkBitmap* bitmap,
}
bool success = false;
- SkWStream* strm = CreateJavaOutputStreamAdaptor(env, jstream, jstorage);
- if (NULL != strm) {
+ if (NULL != bitmap) {
+ SkAutoLockPixels alp(*bitmap);
+
+ if (NULL == bitmap->getPixels()) {
+ return false;
+ }
+
+ SkWStream* strm = CreateJavaOutputStreamAdaptor(env, jstream, jstorage);
+ if (NULL == strm) {
+ return false;
+ }
+
SkImageEncoder* encoder = SkImageEncoder::Create(fm);
if (NULL != encoder) {
success = encoder->encodeStream(strm, *bitmap, quality);