[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