[vlc-commits] [Git][videolan/vlc][master] 2 commits: input: rework input_ConfigVarInit()

Steve Lhomme (@robUx4) gitlab at videolan.org
Tue Feb 11 08:33:31 UTC 2025



Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
a3bc5398 by Thomas Guillem at 2025-02-11T08:16:28+00:00
input: rework input_ConfigVarInit()

Rename it to vlc_object_InitInputConfig(), make it usable from any
vlc_object_t.

- - - - -
adfdbcb0 by Thomas Guillem at 2025-02-11T08:16:28+00:00
demux-run: create missing variables

Fixes the following assert:

```
vlc-demux-dec-libfuzzer: ../../src/config/core.c:101: float config_GetFloat(const char *): Assertion `param != NULL' failed.
==4087818== ERROR: libFuzzer: deadly signal
    #0 0x55f272bd30a8 in __sanitizer_print_stack_trace (/home/tom/work/git/vlc/build-fuzzer/test/vlc-demux-dec-libfuzzer+0x700a8) (BuildId: cc2451ad018f3d0c0fa0f19e5214505d17cca912)
    #1 0x55f272ba5c7c in fuzzer::PrintStackTrace() (/home/tom/work/git/vlc/build-fuzzer/test/vlc-demux-dec-libfuzzer+0x42c7c) (BuildId: cc2451ad018f3d0c0fa0f19e5214505d17cca912)
    #2 0x55f272b8b087 in fuzzer::Fuzzer::CrashCallback() (/home/tom/work/git/vlc/build-fuzzer/test/vlc-demux-dec-libfuzzer+0x28087) (BuildId: cc2451ad018f3d0c0fa0f19e5214505d17cca912)
    #3 0x7f42a3163cdf  (/lib/x86_64-linux-gnu/libc.so.6+0x3fcdf) (BuildId: 3bc74dbb72522bb47e0d899e5615140b044a5b40)
    #4 0x7f42a31b7c8b in __pthread_kill_implementation nptl/pthread_kill.c:43:17
    #5 0x7f42a3163c41 in raise signal/../sysdeps/posix/raise.c:26:13
    #6 0x7f42a314c4ef in abort stdlib/abort.c:79:7
    #7 0x7f42a314c417 in __assert_fail_base assert/assert.c:94:3
    #8 0x7f42a315c551 in __assert_fail assert/assert.c:103:3
    #9 0x7f42a34d0b45 in config_GetFloat /home/tom/work/git/vlc/build-fuzzer/src/../../src/config/core.c:101:5
    #10 0x7f42a35aa158 in var_Inherit /home/tom/work/git/vlc/build-fuzzer/src/../../src/misc/variables.c:1055:30
    #11 0x7f42a35a9e95 in var_Create /home/tom/work/git/vlc/build-fuzzer/src/../../src/misc/variables.c:354:9
    #12 0x7f42996de99a in var_CreateGetFloat /home/tom/work/git/vlc/build-fuzzer/modules/../../include/vlc_variables.h:582:5
    #13 0x7f42996de99a in Open /home/tom/work/git/vlc/build-fuzzer/modules/../../modules/demux/subtitle.c:331:13
    #14 0x7f42a350ba68 in demux_Probe /home/tom/work/git/vlc/build-fuzzer/src/../../src/input/demux.c:112:15
    #15 0x7f42a34dca79 in vlc_module_load /home/tom/work/git/vlc/build-fuzzer/src/../../src/modules/modules.c:230:15
    #16 0x7f42a350b501 in demux_NewAdvanced /home/tom/work/git/vlc/build-fuzzer/src/../../src/input/demux.c:196:20
    #17 0x7f42a350aecf in demux_New /home/tom/work/git/vlc/build-fuzzer/src/../../src/input/demux.c:77:12
    #18 0x55f272bd37bc in demux_process_stream /home/tom/work/git/vlc/build-fuzzer/test/../../test/src/input/demux-run.c:294:22
    #19 0x55f272bd358f in LLVMFuzzerTestOneInput /home/tom/work/git/vlc/build-fuzzer/test/../../test/vlc-demux-libfuzzer.c:54:5
    #20 0x55f272b8c65a in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) (/home/tom/work/git/vlc/build-fuzzer/test/vlc-demux-dec-libfuzzer+0x2965a) (BuildId: cc2451ad018f3d0c0fa0f19e5214505d17cca912)
    #21 0x55f272b96472 in fuzzer::Fuzzer::CrashResistantMergeInternalStep(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, bool) (/home/tom/work/git/vlc/build-fuzzer/test/vlc-demux-dec-libfuzzer+0x33472) (BuildId: cc2451ad018f3d0c0fa0f19e5214505d17cca912)
    #22 0x55f272b7a8a1 in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) (/home/tom/work/git/vlc/build-fuzzer/test/vlc-demux-dec-libfuzzer+0x178a1) (BuildId: cc2451ad018f3d0c0fa0f19e5214505d17cca912)
    #23 0x55f272ba67e6 in main (/home/tom/work/git/vlc/build-fuzzer/test/vlc-demux-dec-libfuzzer+0x437e6) (BuildId: cc2451ad018f3d0c0fa0f19e5214505d17cca912)
    #24 0x7f42a314dd67 in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16
    #25 0x7f42a314de24 in __libc_start_main csu/../csu/libc-start.c:360:3
    #26 0x55f272b6ed30 in _start (/home/tom/work/git/vlc/build-fuzzer/test/vlc-demux-dec-libfuzzer+0xbd30) (BuildId: cc2451ad018f3d0c0fa0f19e5214505d17cca912)
```

- - - - -


5 changed files:

- src/input/input.c
- src/input/input_internal.h
- src/input/var.c
- test/Makefile.am
- test/src/input/demux-run.c


Changes:

=====================================
src/input/input.c
=====================================
@@ -331,7 +331,10 @@ input_thread_t * input_Create( vlc_object_t *p_parent, input_item_t *p_item,
     vlc_interrupt_init(&priv->interrupt);
 
     /* Create Object Variables for private use only */
-    input_ConfigVarInit( p_input );
+
+    vlc_object_InitInputConfig(VLC_OBJECT(p_input),
+                               input_priv(p_input)->type != INPUT_TYPE_PREPARSING,
+                               true);
 
     priv->b_low_delay = var_InheritBool( p_input, "low-delay" );
     priv->i_jitter_max = VLC_TICK_FROM_MS(var_InheritInteger( p_input, "clock-jitter" ));


=====================================
src/input/input_internal.h
=====================================
@@ -700,7 +700,8 @@ void input_ExtractAttachmentAndCacheArt( input_thread_t *, const char *name );
 
 /* var.c */
 
-void input_ConfigVarInit ( input_thread_t * );
+void vlc_object_InitInputConfig(vlc_object_t *obj,
+                                bool playback, bool do_inherit);
 
 /* Subtitles */
 int subtitles_Detect( input_thread_t *, char *, const char *, input_item_slave_t ***, int * );


=====================================
src/input/var.c
=====================================
@@ -36,93 +36,95 @@
  * input_ConfigVarInit:
  *  Create all config object variables
  *****************************************************************************/
-void input_ConfigVarInit ( input_thread_t *p_input )
+void vlc_object_InitInputConfig(vlc_object_t *obj,
+                                bool playback, bool do_inherit)
 {
     /* Create Object Variables for private use only */
+    int inherit_flag = do_inherit ? VLC_VAR_DOINHERIT : 0;
 
-    if( input_priv(p_input)->type != INPUT_TYPE_PREPARSING )
+    if (playback)
     {
-        var_Create( p_input, "video", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
-        var_Create( p_input, "audio", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
-        var_Create( p_input, "spu", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
-
-        var_Create( p_input, "video-track", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT );
-        var_Create( p_input, "audio-track", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT );
-        var_Create( p_input, "sub-track", VLC_VAR_INTEGER|VLC_VAR_DOINHERIT );
-
-        var_Create( p_input, "audio-language",
-                    VLC_VAR_STRING|VLC_VAR_DOINHERIT );
-        var_Create( p_input, "sub-language",
-                    VLC_VAR_STRING|VLC_VAR_DOINHERIT );
-        var_Create( p_input, "menu-language",
-                    VLC_VAR_STRING|VLC_VAR_DOINHERIT );
-
-        var_Create( p_input, "video-track-id",
-                    VLC_VAR_STRING|VLC_VAR_DOINHERIT );
-        var_Create( p_input, "audio-track-id",
-                    VLC_VAR_STRING|VLC_VAR_DOINHERIT );
-        var_Create( p_input, "sub-track-id",
-                    VLC_VAR_STRING|VLC_VAR_DOINHERIT );
-
-        var_Create( p_input, "sub-file", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
-        var_Create( p_input, "sub-autodetect-file", VLC_VAR_BOOL |
-                    VLC_VAR_DOINHERIT );
-        var_Create( p_input, "sub-autodetect-path", VLC_VAR_STRING |
-                    VLC_VAR_DOINHERIT );
-        var_Create( p_input, "sub-autodetect-fuzzy", VLC_VAR_INTEGER |
-                    VLC_VAR_DOINHERIT );
-
-        var_Create( p_input, "sout", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
-        var_Create( p_input, "sout-all",   VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
-        var_Create( p_input, "sout-audio", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
-        var_Create( p_input, "sout-video", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
-        var_Create( p_input, "sout-spu", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
-        var_Create( p_input, "sout-keep",  VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
-
-        var_Create( p_input, "input-repeat",
-                    VLC_VAR_INTEGER|VLC_VAR_DOINHERIT );
-        var_Create( p_input, "start-time", VLC_VAR_FLOAT|VLC_VAR_DOINHERIT );
-        var_Create( p_input, "stop-time", VLC_VAR_FLOAT|VLC_VAR_DOINHERIT );
-        var_Create( p_input, "run-time", VLC_VAR_FLOAT|VLC_VAR_DOINHERIT );
-        var_Create( p_input, "input-fast-seek", VLC_VAR_BOOL|VLC_VAR_DOINHERIT );
-
-        var_Create( p_input, "input-slave",
-                    VLC_VAR_STRING | VLC_VAR_DOINHERIT );
-
-        var_Create( p_input, "audio-desync",
-                    VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
-        var_Create( p_input, "cr-average",
-                    VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
-        var_Create( p_input, "clock-synchro",
-                    VLC_VAR_INTEGER | VLC_VAR_DOINHERIT);
-
-        var_Create( p_input, "bookmarks", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
-        var_Create( p_input, "programs", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
-        var_Create( p_input, "program", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
-        var_Create( p_input, "rate", VLC_VAR_FLOAT | VLC_VAR_DOINHERIT );
+        var_Create(obj, "video", VLC_VAR_BOOL | inherit_flag);
+        var_Create(obj, "audio", VLC_VAR_BOOL | inherit_flag);
+        var_Create(obj, "spu", VLC_VAR_BOOL | inherit_flag);
+
+        var_Create(obj, "video-track", VLC_VAR_INTEGER|inherit_flag);
+        var_Create(obj, "audio-track", VLC_VAR_INTEGER|inherit_flag);
+        var_Create(obj, "sub-track", VLC_VAR_INTEGER|inherit_flag);
+
+        var_Create(obj, "audio-language",
+                    VLC_VAR_STRING|inherit_flag);
+        var_Create(obj, "sub-language",
+                    VLC_VAR_STRING|inherit_flag);
+        var_Create(obj, "menu-language",
+                    VLC_VAR_STRING|inherit_flag);
+
+        var_Create(obj, "video-track-id",
+                    VLC_VAR_STRING|inherit_flag);
+        var_Create(obj, "audio-track-id",
+                    VLC_VAR_STRING|inherit_flag);
+        var_Create(obj, "sub-track-id",
+                    VLC_VAR_STRING|inherit_flag);
+
+        var_Create(obj, "sub-file", VLC_VAR_STRING | inherit_flag);
+        var_Create(obj, "sub-autodetect-file", VLC_VAR_BOOL |
+                    inherit_flag);
+        var_Create(obj, "sub-autodetect-path", VLC_VAR_STRING |
+                    inherit_flag);
+        var_Create(obj, "sub-autodetect-fuzzy", VLC_VAR_INTEGER |
+                    inherit_flag);
+
+        var_Create(obj, "sout", VLC_VAR_STRING | inherit_flag);
+        var_Create(obj, "sout-all",   VLC_VAR_BOOL | inherit_flag);
+        var_Create(obj, "sout-audio", VLC_VAR_BOOL | inherit_flag);
+        var_Create(obj, "sout-video", VLC_VAR_BOOL | inherit_flag);
+        var_Create(obj, "sout-spu", VLC_VAR_BOOL | inherit_flag);
+        var_Create(obj, "sout-keep",  VLC_VAR_BOOL | inherit_flag);
+
+        var_Create(obj, "input-repeat",
+                    VLC_VAR_INTEGER|inherit_flag);
+        var_Create(obj, "start-time", VLC_VAR_FLOAT|inherit_flag);
+        var_Create(obj, "stop-time", VLC_VAR_FLOAT|inherit_flag);
+        var_Create(obj, "run-time", VLC_VAR_FLOAT|inherit_flag);
+        var_Create(obj, "input-fast-seek", VLC_VAR_BOOL|inherit_flag);
+
+        var_Create(obj, "input-slave",
+                    VLC_VAR_STRING | inherit_flag);
+
+        var_Create(obj, "audio-desync",
+                    VLC_VAR_INTEGER | inherit_flag);
+        var_Create(obj, "cr-average",
+                    VLC_VAR_INTEGER | inherit_flag);
+        var_Create(obj, "clock-synchro",
+                    VLC_VAR_INTEGER | inherit_flag);
+
+        var_Create(obj, "bookmarks", VLC_VAR_STRING | inherit_flag);
+        var_Create(obj, "programs", VLC_VAR_STRING | inherit_flag);
+        var_Create(obj, "program", VLC_VAR_INTEGER | inherit_flag);
+        var_Create(obj, "rate", VLC_VAR_FLOAT | inherit_flag);
     }
 
     /* */
-    var_Create( p_input, "input-record-native", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
+    var_Create(obj, "input-record-native", VLC_VAR_BOOL | inherit_flag);
 
     /* */
-    var_Create( p_input, "demux", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
-    var_Create( p_input, "demux-filter", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
-    var_Create( p_input, "stream-filter", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
+    var_Create(obj, "demux", VLC_VAR_STRING | inherit_flag);
+    var_Create(obj, "demux-filter", VLC_VAR_STRING | inherit_flag);
+    var_Create(obj, "stream-filter", VLC_VAR_STRING | inherit_flag);
 
     /* Meta */
-    var_Create( p_input, "meta-title", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
-    var_Create( p_input, "meta-author", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
-    var_Create( p_input, "meta-artist", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
-    var_Create( p_input, "meta-genre", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
-    var_Create( p_input, "meta-copyright", VLC_VAR_STRING | VLC_VAR_DOINHERIT);
-    var_Create( p_input, "meta-description", VLC_VAR_STRING|VLC_VAR_DOINHERIT);
-    var_Create( p_input, "meta-date", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
-    var_Create( p_input, "meta-url", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
+    var_Create(obj, "meta-title", VLC_VAR_STRING | inherit_flag);
+    var_Create(obj, "meta-author", VLC_VAR_STRING | inherit_flag);
+    var_Create(obj, "meta-artist", VLC_VAR_STRING | inherit_flag);
+    var_Create(obj, "meta-genre", VLC_VAR_STRING | inherit_flag);
+    var_Create(obj, "meta-copyright", VLC_VAR_STRING | inherit_flag);
+    var_Create(obj, "meta-description", VLC_VAR_STRING|inherit_flag);
+    var_Create(obj, "meta-date", VLC_VAR_STRING | inherit_flag);
+    var_Create(obj, "meta-url", VLC_VAR_STRING | inherit_flag);
 
     /* Inherited by demux/subtitle.c */
-    var_Create( p_input, "sub-original-fps", VLC_VAR_FLOAT );
+    var_Create(obj, "sub-original-fps", VLC_VAR_FLOAT);
 
     /* used by Medialibrary */
-    var_Create( p_input, "save-recentplay", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
+    var_Create(obj, "save-recentplay", VLC_VAR_BOOL | inherit_flag);
 }


=====================================
test/Makefile.am
=====================================
@@ -330,8 +330,8 @@ FORCE:
 .PHONY: FORCE
 
 libvlc_demux_run_la_SOURCES = src/input/demux-run.c src/input/demux-run.h \
-	src/input/common.c src/input/common.h
-libvlc_demux_run_la_CPPFLAGS = $(AM_CPPFLAGS)
+	src/input/common.c src/input/common.h $(top_srcdir)/src/input/var.c
+libvlc_demux_run_la_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/src
 libvlc_demux_run_la_LDFLAGS = -no-install -static
 libvlc_demux_run_la_LIBADD = \
 	../lib/libvlc.la ../src/libvlccore.la ../compat/libcompat.la


=====================================
test/src/input/demux-run.c
=====================================
@@ -49,6 +49,9 @@
 #include "demux-run.h"
 #include "decoder.h"
 
+void vlc_object_InitInputConfig(vlc_object_t *obj,
+                                bool playback, bool do_inherit);
+
 struct test_es_out_t
 {
     struct es_out_t out;
@@ -222,6 +225,8 @@ static const struct es_out_callbacks es_out_cbs =
 
 static es_out_t *test_es_out_create(vlc_object_t *parent)
 {
+    vlc_object_InitInputConfig(parent, true, false);
+
     struct test_es_out_t *ctx = malloc(sizeof (*ctx));
     if (ctx == NULL)
     {



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/6af0992c18abf1802aec250c196fe2abb8f8342a...adfdbcb0f334a23f8d4e8756b203233e64f25078

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/6af0992c18abf1802aec250c196fe2abb8f8342a...adfdbcb0f334a23f8d4e8756b203233e64f25078
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the vlc-commits mailing list