OSDN Git Service

Fixed memory leakage in the DRM framework
authorHung Nguyen <hung.nguyen@sonymobile.com>
Tue, 5 Jun 2012 11:19:53 +0000 (13:19 +0200)
committerJames Dong <jdong@google.com>
Thu, 24 Jan 2013 23:42:42 +0000 (15:42 -0800)
Change-Id: Ib1276bec6cafb4e94f8f13b52e50e4987765eec4

drm/common/IDrmManagerService.cpp
drm/common/ReadWriteUtils.cpp
drm/libdrmframework/plugins/passthru/src/DrmPassthruPlugIn.cpp

index 0282036..91fd91e 100644 (file)
@@ -190,8 +190,9 @@ DrmConstraints* BpDrmManagerService::getConstraints(
             if (0 < bufferSize) {
                 data = new char[bufferSize];
                 reply.read(data, bufferSize);
+                drmConstraints->put(&key, data);
+                delete[] data;
             }
-            drmConstraints->put(&key, data);
         }
     }
     return drmConstraints;
@@ -219,8 +220,9 @@ DrmMetadata* BpDrmManagerService::getMetadata(int uniqueId, const String8* path)
             if (0 < bufferSize) {
                 data = new char[bufferSize];
                 reply.read(data, bufferSize);
+                drmMetadata->put(&key, data);
+                delete[] data;
             }
-            drmMetadata->put(&key, data);
         }
     }
     return drmMetadata;
@@ -889,9 +891,11 @@ status_t BnDrmManagerService::onTransact(
                 int bufferSize = 0;
                 if (NULL != value) {
                     bufferSize = strlen(value);
+                    reply->writeInt32(bufferSize + 1);
+                    reply->write(value, bufferSize + 1);
+                } else {
+                    reply->writeInt32(0);
                 }
-                reply->writeInt32(bufferSize + 1);
-                reply->write(value, bufferSize + 1);
             }
         }
         delete drmConstraints; drmConstraints = NULL;
index fd17e98..d696f16 100644 (file)
@@ -47,7 +47,7 @@ String8 ReadWriteUtils::readBytes(const String8& filePath) {
             if (length == read(fd, (void*) bytes, length)) {
                 string.append(bytes, length);
             }
-            delete bytes;
+            delete[] bytes;
         }
         fclose(file);
     }
index fa659fd..084e323 100644 (file)
@@ -65,10 +65,11 @@ DrmConstraints* DrmPassthruPlugIn::onGetConstraints(
     char* charValue = NULL;
     charValue = new char[value.length() + 1];
     strncpy(charValue, value.string(), value.length());
+    charValue[value.length()] = '\0';
 
     //Just add dummy available time for verification
     drmConstraints->put(&(DrmConstraints::LICENSE_AVAILABLE_TIME), charValue);
-
+    delete[] charValue;
     return drmConstraints;
 }