[vlc-devel] [PATCH] smem: do not crash if the callbacks are not defined

Adrien Maglo magsoft at videolan.org
Wed Jul 6 16:05:38 CEST 2016


---
 modules/stream_out/smem.c | 26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/modules/stream_out/smem.c b/modules/stream_out/smem.c
index a5fb1ee..ee69f4d 100644
--- a/modules/stream_out/smem.c
+++ b/modules/stream_out/smem.c
@@ -320,6 +320,11 @@ static int SendVideo( sout_stream_t *p_stream, sout_stream_id_sys_t *id,
     uint8_t* p_pixels = NULL;
 
     /* Calling the prerender callback to get user buffer */
+    if (p_sys->pf_video_prerender_callback == NULL)
+    {
+        block_ChainRelease( p_buffer );
+        return VLC_EGENERIC;
+    }
     p_sys->pf_video_prerender_callback( id->p_data, &p_pixels, i_size );
 
     if (!p_pixels)
@@ -332,9 +337,10 @@ static int SendVideo( sout_stream_t *p_stream, sout_stream_id_sys_t *id,
     /* Copying data into user buffer */
     memcpy( p_pixels, p_buffer->p_buffer, i_size );
     /* Calling the postrender callback to tell the user his buffer is ready */
-    p_sys->pf_video_postrender_callback( id->p_data, p_pixels,
-                                         id->format->video.i_width, id->format->video.i_height,
-                                         id->format->video.i_bits_per_pixel, i_size, p_buffer->i_pts );
+    if (p_sys->pf_video_postrender_callback != NULL)
+        p_sys->pf_video_postrender_callback( id->p_data, p_pixels,
+                                             id->format->video.i_width, id->format->video.i_height,
+                                             id->format->video.i_bits_per_pixel, i_size, p_buffer->i_pts );
     block_ChainRelease( p_buffer );
     return VLC_SUCCESS;
 }
@@ -356,8 +362,15 @@ static int SendAudio( sout_stream_t *p_stream, sout_stream_id_sys_t *id,
     }
 
     i_samples = i_size / ( ( id->format->audio.i_bitspersample / 8 ) * id->format->audio.i_channels );
+
     /* Calling the prerender callback to get user buffer */
+    if (p_sys->pf_audio_prerender_callback == NULL)
+    {
+        block_ChainRelease( p_buffer );
+        return VLC_EGENERIC;
+    }
     p_sys->pf_audio_prerender_callback( id->p_data, &p_pcm_buffer, i_size );
+
     if (!p_pcm_buffer)
     {
         msg_Err( p_stream, "No buffer given!" );
@@ -368,9 +381,10 @@ static int SendAudio( sout_stream_t *p_stream, sout_stream_id_sys_t *id,
     /* Copying data into user buffer */
     memcpy( p_pcm_buffer, p_buffer->p_buffer, i_size );
     /* Calling the postrender callback to tell the user his buffer is ready */
-    p_sys->pf_audio_postrender_callback( id->p_data, p_pcm_buffer,
-                                         id->format->audio.i_channels, id->format->audio.i_rate, i_samples,
-                                         id->format->audio.i_bitspersample, i_size, p_buffer->i_pts );
+    if (p_sys->pf_audio_postrender_callback != NULL)
+        p_sys->pf_audio_postrender_callback( id->p_data, p_pcm_buffer,
+                                             id->format->audio.i_channels, id->format->audio.i_rate, i_samples,
+                                             id->format->audio.i_bitspersample, i_size, p_buffer->i_pts );
     block_ChainRelease( p_buffer );
     return VLC_SUCCESS;
 }
-- 
2.7.4



More information about the vlc-devel mailing list