[FFmpeg-devel] [PATCH] avfilter/formats: proper error handling in ff_channel_layouts_ref() and ff_formats_ref()

2015-03-12 Thread Clément Bœsch
Also make sure the allocation and its check are properly done.
---
 libavfilter/formats.c | 20 +++-
 libavfilter/formats.h |  6 +++---
 2 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/libavfilter/formats.c b/libavfilter/formats.c
index eb3b87a..47b20a4 100644
--- a/libavfilter/formats.c
+++ b/libavfilter/formats.c
@@ -411,19 +411,21 @@ AVFilterChannelLayouts *ff_all_channel_counts(void)
 return ret;
 }
 
-#define FORMATS_REF(f, ref)  \
-do { \
-*ref = f;\
-f-refs = av_realloc(f-refs, sizeof(*f-refs) * ++f-refcount); \
-f-refs[f-refcount-1] = ref;\
-} while (0)
-
-void ff_channel_layouts_ref(AVFilterChannelLayouts *f, AVFilterChannelLayouts 
**ref)
+#define FORMATS_REF(f, ref)
 \
+void *tmp = av_realloc_array(f-refs, sizeof(*f-refs), f-refcount + 1);  
 \
+if (!tmp)  
 \
+return AVERROR(ENOMEM);
 \
+f-refs = tmp; 
 \
+f-refs[f-refcount++] = ref;  
 \
+*ref = f;  
 \
+return 0
+
+int ff_channel_layouts_ref(AVFilterChannelLayouts *f, AVFilterChannelLayouts 
**ref)
 {
 FORMATS_REF(f, ref);
 }
 
-void ff_formats_ref(AVFilterFormats *f, AVFilterFormats **ref)
+int ff_formats_ref(AVFilterFormats *f, AVFilterFormats **ref)
 {
 FORMATS_REF(f, ref);
 }
diff --git a/libavfilter/formats.h b/libavfilter/formats.h
index 468eac8..f94855d 100644
--- a/libavfilter/formats.h
+++ b/libavfilter/formats.h
@@ -159,8 +159,8 @@ int ff_add_channel_layout(AVFilterChannelLayouts **l, 
uint64_t channel_layout);
 /**
  * Add *ref as a new reference to f.
  */
-void ff_channel_layouts_ref(AVFilterChannelLayouts *f,
-AVFilterChannelLayouts **ref);
+int ff_channel_layouts_ref(AVFilterChannelLayouts *f,
+   AVFilterChannelLayouts **ref);
 
 /**
  * Remove a reference to a channel layouts list.
@@ -233,7 +233,7 @@ AVFilterFormats *ff_merge_formats(AVFilterFormats *a, 
AVFilterFormats *b,
  *  | || || ||
  *  |||
  */
-void ff_formats_ref(AVFilterFormats *formats, AVFilterFormats **ref);
+int ff_formats_ref(AVFilterFormats *formats, AVFilterFormats **ref);
 
 /**
  * If *ref is non-NULL, remove *ref as a reference to the format list
-- 
2.3.2

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] avfilter/formats: proper error handling in ff_channel_layouts_ref() and ff_formats_ref()

2015-03-12 Thread Michael Niedermayer
On Thu, Mar 12, 2015 at 11:39:12PM +0100, Clément Bœsch wrote:
 Also make sure the allocation and its check are properly done.
 ---
  libavfilter/formats.c | 20 +++-
  libavfilter/formats.h |  6 +++---
  2 files changed, 14 insertions(+), 12 deletions(-)

LGTM

thanks

[...]
-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

You can kill me, but you cannot change the truth.


signature.asc
Description: Digital signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel