summary refs log tree commit diff
path: root/gnu/packages/patches/icecat-CVE-2015-7222-pt1.patch
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/patches/icecat-CVE-2015-7222-pt1.patch')
-rw-r--r--gnu/packages/patches/icecat-CVE-2015-7222-pt1.patch112
1 files changed, 112 insertions, 0 deletions
diff --git a/gnu/packages/patches/icecat-CVE-2015-7222-pt1.patch b/gnu/packages/patches/icecat-CVE-2015-7222-pt1.patch
new file mode 100644
index 0000000000..c5d0e4ad60
--- /dev/null
+++ b/gnu/packages/patches/icecat-CVE-2015-7222-pt1.patch
@@ -0,0 +1,112 @@
+From 76e6db3e514350fd146cb04425e669d63b59f889 Mon Sep 17 00:00:00 2001
+From: Gerald Squelart <gsquelart@mozilla.com>
+Date: Wed, 9 Dec 2015 09:59:37 +0100
+Subject: [PATCH] Bug 1216748 - p2. Handle failed malloc in Metadata storage -
+ r=rillian, a=sylvestre
+
+---
+ .../av/include/media/stagefright/MetaData.h        |  2 +-
+ .../av/media/libstagefright/MetaData.cpp           | 35 ++++++++++++++--------
+ 2 files changed, 24 insertions(+), 13 deletions(-)
+
+diff --git a/media/libstagefright/frameworks/av/include/media/stagefright/MetaData.h b/media/libstagefright/frameworks/av/include/media/stagefright/MetaData.h
+index 30d969d..0a8ff77 100644
+--- a/media/libstagefright/frameworks/av/include/media/stagefright/MetaData.h
++++ b/media/libstagefright/frameworks/av/include/media/stagefright/MetaData.h
+@@ -248,7 +248,7 @@ private:
+             return mSize <= sizeof(u.reservoir);
+         }
+ 
+-        void allocateStorage(size_t size);
++        bool allocateStorage(size_t size);
+         void freeStorage();
+ 
+         void *storage() {
+diff --git a/media/libstagefright/frameworks/av/media/libstagefright/MetaData.cpp b/media/libstagefright/frameworks/av/media/libstagefright/MetaData.cpp
+index c832c96..cba324d 100644
+--- a/media/libstagefright/frameworks/av/media/libstagefright/MetaData.cpp
++++ b/media/libstagefright/frameworks/av/media/libstagefright/MetaData.cpp
+@@ -220,7 +220,7 @@ bool MetaData::findData(uint32_t key, uint32_t *type,
+ }
+ 
+ MetaData::typed_data::typed_data()
+-    : mType(0),
++    : mType(TYPE_NONE),
+       mSize(0) {
+ }
+ 
+@@ -231,17 +231,19 @@ MetaData::typed_data::~typed_data() {
+ MetaData::typed_data::typed_data(const typed_data &from)
+     : mType(from.mType),
+       mSize(0) {
+-    allocateStorage(from.mSize);
+-    memcpy(storage(), from.storage(), mSize);
++    if (allocateStorage(from.mSize)) {
++        memcpy(storage(), from.storage(), mSize);
++    }
+ }
+ 
+ MetaData::typed_data &MetaData::typed_data::operator=(
+         const MetaData::typed_data &from) {
+     if (this != &from) {
+         clear();
+-        mType = from.mType;
+-        allocateStorage(from.mSize);
+-        memcpy(storage(), from.storage(), mSize);
++        if (allocateStorage(from.mSize)) {
++            mType = from.mType;
++            memcpy(storage(), from.storage(), mSize);
++        }
+     }
+ 
+     return *this;
+@@ -250,16 +252,17 @@ MetaData::typed_data &MetaData::typed_data::operator=(
+ void MetaData::typed_data::clear() {
+     freeStorage();
+ 
+-    mType = 0;
++    mType = TYPE_NONE;
+ }
+ 
+ void MetaData::typed_data::setData(
+         uint32_t type, const void *data, size_t size) {
+     clear();
+ 
+-    mType = type;
+-    allocateStorage(size);
+-    memcpy(storage(), data, size);
++    if (allocateStorage(size)) {
++        mType = type;
++        memcpy(storage(), data, size);
++    }
+ }
+ 
+ void MetaData::typed_data::getData(
+@@ -269,14 +272,22 @@ void MetaData::typed_data::getData(
+     *data = storage();
+ }
+ 
+-void MetaData::typed_data::allocateStorage(size_t size) {
++bool MetaData::typed_data::allocateStorage(size_t size) {
++    // Update mSize now, as it is needed by usesReservoir() below.
++    // (mSize will be reset if the allocation fails further below.)
+     mSize = size;
+ 
+     if (usesReservoir()) {
+-        return;
++        return true;
+     }
+ 
+     u.ext_data = malloc(mSize);
++    if (!u.ext_data) {
++      mType = TYPE_NONE;
++      mSize = 0;
++      return false;
++    }
++    return true;
+ }
+ 
+ void MetaData::typed_data::freeStorage() {
+-- 
+2.6.3
+