]> git.sesse.net Git - vlc/blobdiff - src/input/vlm.c
Check asprintf return value and avoid potential segfault.
[vlc] / src / input / vlm.c
index c239fde67997df23a4ffe5e2ba9eff02771ec0c7..69148f604bccb2baff57c3585dca609f1662fc99 100644 (file)
@@ -38,8 +38,6 @@
 
 #include <vlc_vlm.h>
 
-#ifdef ENABLE_VLM
-
 #ifndef WIN32
 #   include <sys/time.h>                                   /* gettimeofday() */
 #endif
@@ -505,13 +503,19 @@ static int vlm_OnMediaUpdate( vlm_t *p_vlm, vlm_media_sys_t *p_media )
                 p_cfg->psz_name );
 
             if( p_cfg->psz_output )
-                asprintf( &psz_output, "%s:description", p_cfg->psz_output );
+            {
+                if( asprintf( &psz_output, "%s:description", p_cfg->psz_output )  == -1 )
+                    psz_output = NULL;
+            }
             else
-                asprintf( &psz_output, "#description" );
+                psz_output = strdup( "#description" );
 
-            asprintf( &psz_dup, "sout=%s", psz_output);
-            input_ItemAddOption( p_media->vod.p_item, psz_dup );
-            free( psz_dup );
+            if( psz_output && asprintf( &psz_dup, "sout=%s", psz_output) != -1 )
+            {
+                input_ItemAddOption( p_media->vod.p_item, psz_dup );
+                free( psz_output );
+                free( psz_dup );
+            }
             for( i = 0; i < p_cfg->i_option; i++ )
                 input_ItemAddOption( p_media->vod.p_item,
                                      p_cfg->ppsz_option[i] );
@@ -526,7 +530,6 @@ static int vlm_OnMediaUpdate( vlm_t *p_vlm, vlm_media_sys_t *p_media )
                 input_StopThread( p_input );
                 vlc_object_release( p_input );
             }
-            free( psz_output );
             free( psz_header );
 
             if( p_cfg->vod.psz_mux )
@@ -1138,48 +1141,3 @@ int vlm_Control( vlm_t *p_vlm, int i_query, ... )
 
     return i_result;
 }
-
-#else /* ENABLE_VLM */
-
-/* We just define an empty wrapper */
-vlm_t *__vlm_New( vlc_object_t *a )
-{
-    msg_Err( a, "VideoLAN manager support is disabled" );
-    return NULL;
-}
-
-void vlm_Delete( vlm_t *a )
-{
-    (void)a;
-}
-
-int vlm_ExecuteCommand( vlm_t *a, const char *b, vlm_message_t **c )
-{
-    abort();
-}
-
-vlm_message_t *vlm_MessageNew( const char *psz_name,
-                               const char *psz_format, ... )
-{
-    (void)psz_name; (void)psz_format;
-    return NULL;
-}
-
-vlm_message_t *vlm_MessageAdd( vlm_message_t *p_message,
-                               vlm_message_t *p_child )
-{
-    abort();
-}
-
-void vlm_MessageDelete( vlm_message_t *a )
-{
-    (void)a;
-}
-
-int vlm_Control( vlm_t *p_vlm, int i_query, ... )
-{
-    (void)p_vlm; (void)i_query;
-    return VLC_EGENERIC;
-}
-
-#endif /* ENABLE_VLM */