[libdvdnav-devel] [Git][videolan/libdvdread][master] 2 commits: fix: prevent segfault when libdvdcss is missing

Jean-Baptiste Kempf (@jbk) gitlab at videolan.org
Fri Nov 7 10:23:42 UTC 2025



Jean-Baptiste Kempf pushed to branch master at VideoLAN / libdvdread


Commits:
a57efc5a by Saifelden Mohamed Ismail at 2025-11-07T10:08:43+02:00
fix: prevent segfault when libdvdcss is missing

- - - - -
c112e03d by Saifelden Mohamed Ismail at 2025-11-07T11:48:49+02:00
formatting: adjusted for dvd_input.c

- - - - -


1 changed file:

- src/dvd_input.c


Changes:

=====================================
src/dvd_input.c
=====================================
@@ -471,8 +471,8 @@ int dvdinput_setup(void *priv, dvd_logger_cb *logcb, dvd_type_t dvda_flag)
 #ifdef HAVE_DVDCSS_DVDCPXM_H
   /* linking to libdvdcss */
   dvdcss_library = &dvdcss_library;  /* Give it some value != NULL */
-#elif defined( HAVE_DVDCSS_DVDCSS_H)
-  if (dvda_flag ==DVD_V)
+#elif defined( HAVE_DVDCSS_DVDCSS_H )
+  if (dvda_flag == DVD_V )
     dvdcss_library = &dvdcss_library;  /* Give it some value != NULL */
 #else
   /* dlopening libdvdcss */
@@ -522,7 +522,7 @@ int dvdinput_setup(void *priv, dvd_logger_cb *logcb, dvd_type_t dvda_flag)
 #define U_S
 #endif
     /* functions should have the same template*/
-    switch(dvda_flag){
+    switch(dvda_flag) {
       case DVD_V:
       /* hybrid discs encrypt video tracks with css*/
         DVDcss_open_stream = (dvdcss_t (*)(void *, dvdcss_stream_cb *))
@@ -540,6 +540,13 @@ int dvdinput_setup(void *priv, dvd_logger_cb *logcb, dvd_type_t dvda_flag)
                      "Old (pre-0.0.2) version of libdvdcss found. "
                     "libdvdread: You should get the latest version from "
                     "http://www.videolan.org/" );
+        } else if( ( !DVDcss_open || !DVDcss_close || !DVDcss_seek
+            || !DVDcss_read ) &&  dvda_flag == DVD_V ) {
+          DVDReadLog(priv, logcb, DVD_LOGGER_LEVEL_ERROR,
+                     "Missing symbols in %s, "
+                    "this shouldn't happen !", CSS_LIB);
+          dlclose(dvdcss_library);
+          dvdcss_library = NULL;
         }
       break;
       case DVD_A:
@@ -556,30 +563,22 @@ int dvdinput_setup(void *priv, dvd_logger_cb *logcb, dvd_type_t dvda_flag)
           dlsym(dvdcss_library, U_S "dvdcpxm_read");
         DVDcpxm_init = (int (*)(dvdcss_t, uint8_t *p_mkb))
           dlsym(dvdcss_library, U_S "dvdcpxm_init");
-#else 
+
+        if( ( !DVDcpxm_open || !DVDcpxm_close || !DVDcpxm_seek
+                  || !DVDcpxm_read || !DVDcpxm_init ) && dvda_flag == DVD_A ) {
+          DVDReadLog(priv, logcb, DVD_LOGGER_LEVEL_ERROR,
+                     "Missing symbols in %s, "
+                    "DVD-Audio support not present in libdvdcss", CSS_LIB);
+          dlclose(dvdcss_library);
+          dvdcss_library = NULL;
+        }
+#else
         dlclose(dvdcss_library);
         dvdcss_library = NULL;
-      break;
 #endif
+      break;
     }
-  } else if(!DVDcss_open || !DVDcss_close || !DVDcss_seek
-            || !DVDcss_read) {
-    DVDReadLog(priv, logcb, DVD_LOGGER_LEVEL_ERROR,
-               "Missing symbols in %s, "
-              "this shouldn't happen !", CSS_LIB);
-    dlclose(dvdcss_library);
-    dvdcss_library = NULL;
   }
-#ifdef HAVE_DVDCSS_DVDCPXM_H
-  } else if( ( !DVDcpxm_open || !DVDcpxm_close || !DVDcpxm_seek
-            || !DVDcpxm_read || !DVDcpxm_init ) && dvda_flag == DVD_A ) {
-    DVDReadLog(priv, logcb, DVD_LOGGER_LEVEL_ERROR,
-               "Missing symbols in %s, "
-              "DVD-Audio support not present in libdvdcss", CSS_LIB);
-    dlclose(dvdcss_library);
-    dvdcss_library = NULL;
-  }
-#endif
 #endif /* HAVE_DVDCSS_DVDCSS_H */
 
   if(dvdcss_library != NULL) {



View it on GitLab: https://code.videolan.org/videolan/libdvdread/-/compare/e5a227a664ece9be728fd0cf251bb137679d6664...c112e03da68f7ad36d0ce5d1344d3738fd3e837e

-- 
View it on GitLab: https://code.videolan.org/videolan/libdvdread/-/compare/e5a227a664ece9be728fd0cf251bb137679d6664...c112e03da68f7ad36d0ce5d1344d3738fd3e837e
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the libdvdnav-devel mailing list