OSDN Git Service

Fix potential NULL dereference errors.
authorGeorge Burgess IV <gbiv@google.com>
Wed, 14 Dec 2016 00:12:10 +0000 (16:12 -0800)
committerGeorge Burgess IV <gbiv@google.com>
Wed, 14 Dec 2016 00:14:42 +0000 (16:14 -0800)
Found by the static analyzer; there were 10, but all of them looked
like:

frameworks/base/media/jni/android_mtp_MtpDatabase.cpp:751:39: warning:
Array access (from variable 'longValues') results in a null pointer
dereference
    packet.putUInt128(longValues[i]);

Bug: None.
Test: Warnings no longer appear.
Change-Id: I0f41e93922c51563d77b9f58f3f6538688ff2065

media/jni/android_mtp_MtpDatabase.cpp

index 34a7f7c..6cad723 100644 (file)
@@ -719,6 +719,24 @@ MtpResponseCode MyMtpDatabase::getObjectPropertyList(MtpObjectHandle handle,
             int type = dataTypes[i];
             packet.putUInt16(type);
 
+            if (type == MTP_TYPE_STR) {
+                jstring value = (jstring)env->GetObjectArrayElement(stringValuesArray, i);
+                const char *valueStr = (value ? env->GetStringUTFChars(value, NULL) : NULL);
+                if (valueStr) {
+                    packet.putString(valueStr);
+                    env->ReleaseStringUTFChars(value, valueStr);
+                } else {
+                    packet.putEmptyString();
+                }
+                env->DeleteLocalRef(value);
+                continue;
+            }
+
+            if (!longValues) {
+                ALOGE("bad longValuesArray value in MyMtpDatabase::getObjectPropertyList");
+                continue;
+            }
+
             switch (type) {
                 case MTP_TYPE_INT8:
                     packet.putInt8(longValues[i]);
@@ -750,18 +768,6 @@ MtpResponseCode MyMtpDatabase::getObjectPropertyList(MtpObjectHandle handle,
                 case MTP_TYPE_UINT128:
                     packet.putUInt128(longValues[i]);
                     break;
-                case MTP_TYPE_STR: {
-                    jstring value = (jstring)env->GetObjectArrayElement(stringValuesArray, i);
-                    const char *valueStr = (value ? env->GetStringUTFChars(value, NULL) : NULL);
-                    if (valueStr) {
-                        packet.putString(valueStr);
-                        env->ReleaseStringUTFChars(value, valueStr);
-                    } else {
-                        packet.putEmptyString();
-                    }
-                    env->DeleteLocalRef(value);
-                    break;
-                }
                 default:
                     ALOGE("bad or unsupported data type in MyMtpDatabase::getObjectPropertyList");
                     break;