lavc/options: don't copy priv context when it is not AVOption object
authorLukasz Marek <lukasz.m.luki2@gmail.com>
Tue, 2 Dec 2014 22:24:15 +0000 (23:24 +0100)
committerLukasz Marek <lukasz.m.luki2@gmail.com>
Fri, 5 Dec 2014 23:05:18 +0000 (00:05 +0100)
This prevents potential crash when opt API is used without a class.

Signed-off-by: Lukasz Marek <lukasz.m.luki2@gmail.com>
libavcodec/options.c

index 7f9fb07..49c8b40 100644 (file)
@@ -195,11 +195,12 @@ int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src)
     av_opt_copy(dest, src);
 
     dest->priv_data       = orig_priv_data;
     av_opt_copy(dest, src);
 
     dest->priv_data       = orig_priv_data;
+    dest->codec           = orig_codec;
 
 
-    if (orig_priv_data)
+    if (orig_priv_data && src->codec && src->codec->priv_class &&
+        dest->codec && dest->codec->priv_class)
         av_opt_copy(orig_priv_data, src->priv_data);
 
         av_opt_copy(orig_priv_data, src->priv_data);
 
-    dest->codec           = orig_codec;
 
     /* set values specific to opened codecs back to their default state */
     dest->slice_offset    = NULL;
 
     /* set values specific to opened codecs back to their default state */
     dest->slice_offset    = NULL;