swscale: Check memory allocation

Message ID 20150321234003.57B065DEA0@aruru.libav.org
State New
Headers show

Commit Message

Janne Grunau March 21, 2015, 11:40 p.m.
Module: libav
Branch: master
Commit: 7ebb3022297aa00afda6800105684b8303f2608e

Author:    Federico Tomassetti <federico@tomassetti.me>
Committer: Luca Barbato <lu_zero@gentoo.org>
Date:      Sat Mar 21 10:45:01 2015 +0000

swscale: Check memory allocation

Bug-Id: CID 1267890
CC: libav-stable@libav.org

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>

---

 libswscale/utils.c |   22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

Patch

diff --git a/libswscale/utils.c b/libswscale/utils.c
index 23d7c93..f5b2511 100644
--- a/libswscale/utils.c
+++ b/libswscale/utils.c
@@ -1382,17 +1382,13 @@  SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur,
         filter->chrV = sws_getIdentityVec();
     }
 
-    if (!filter->lumH || !filter->lumV || !filter->chrH || !filter->chrV) {
-        sws_freeVec(filter->lumH);
-        sws_freeVec(filter->lumV);
-        sws_freeVec(filter->chrH);
-        sws_freeVec(filter->chrV);
-        av_freep(&filter);
-        return NULL;
-    }
+    if (!filter->lumH || !filter->lumV || !filter->chrH || !filter->chrV)
+        goto fail;
 
     if (chromaSharpen != 0.0) {
         SwsVector *id = sws_getIdentityVec();
+        if (!id)
+            goto fail;
         sws_scaleVec(filter->chrH, -chromaSharpen);
         sws_scaleVec(filter->chrV, -chromaSharpen);
         sws_addVec(filter->chrH, id);
@@ -1402,6 +1398,8 @@  SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur,
 
     if (lumaSharpen != 0.0) {
         SwsVector *id = sws_getIdentityVec();
+        if (!id)
+            goto fail;
         sws_scaleVec(filter->lumH, -lumaSharpen);
         sws_scaleVec(filter->lumV, -lumaSharpen);
         sws_addVec(filter->lumH, id);
@@ -1426,6 +1424,14 @@  SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur,
         sws_printVec2(filter->lumH, NULL, AV_LOG_DEBUG);
 
     return filter;
+
+fail:
+    sws_freeVec(filter->lumH);
+    sws_freeVec(filter->lumV);
+    sws_freeVec(filter->chrH);
+    sws_freeVec(filter->chrV);
+    av_freep(&filter);
+    return NULL;
 }
 
 SwsVector *sws_allocVec(int length)