Hello community, here is the log from the commit of package libdvdread for openSUSE:Factory checked in at 2018-01-28 20:29:45 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libdvdread (Old) and /work/SRC/openSUSE:Factory/.libdvdread.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libdvdread" Sun Jan 28 20:29:45 2018 rev:31 rq:570235 version:6.0.0 Changes: -------- --- /work/SRC/openSUSE:Factory/libdvdread/libdvdread.changes 2015-10-03 20:29:43.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.libdvdread.new/libdvdread.changes 2018-01-28 20:29:47.125085517 +0100 @@ -1,0 +2,15 @@ +Sat Jan 27 13:01:45 UTC 2018 - j.loren...@kabelmail.de + +- Update to version 6.0.0: + * restrict the number of symbols to be exposed to the + shared-object + * remove dvdinput_error function + * improve compatibility with some DVDs (notably the eOne ones) + * fix write after free in ifoFree functions + * fix possible buffer overflow in open + * additional checks on DVDReadBytes arguments + * fix leaks +- Removed libdvdread-no-internal-crypto.patch because it's not + applied anymore. + +------------------------------------------------------------------- Old: ---- libdvdread-5.0.3.tar.bz2 libdvdread-5.0.3.tar.bz2.asc libdvdread-no-internal-crypto.patch New: ---- libdvdread-6.0.0.tar.bz2 libdvdread-6.0.0.tar.bz2.asc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libdvdread.spec ++++++ --- /var/tmp/diff_new_pack.5rqsYX/_old 2018-01-28 20:29:48.529019940 +0100 +++ /var/tmp/diff_new_pack.5rqsYX/_new 2018-01-28 20:29:48.541019379 +0100 @@ -1,7 +1,7 @@ # # spec file for package libdvdread # -# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: libdvdread -Version: 5.0.3 +Version: 6.0.0 Release: 0 Summary: Library for Reading DVD Video Images License: GPL-2.0+ @@ -27,7 +27,6 @@ Source1: http://download.videolan.org/videolan/%{name}/%{version}/%{name}-%{version}.tar.bz2.asc Source2: %{name}.keyring Source3: baselibs.conf -Patch2: libdvdread-no-internal-crypto.patch BuildRequires: autoconf BuildRequires: automake BuildRequires: libtool @@ -61,7 +60,6 @@ %prep %setup -q -#patch2 %build autoreconf -fiv ++++++ libdvdread-5.0.3.tar.bz2 -> libdvdread-6.0.0.tar.bz2 ++++++ ++++ 3219 lines of diff (skipped) ++++ retrying with extended exclude list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libdvdread-5.0.3/ChangeLog new/libdvdread-6.0.0/ChangeLog --- old/libdvdread-5.0.3/ChangeLog 2015-03-25 14:58:27.000000000 +0100 +++ new/libdvdread-6.0.0/ChangeLog 2018-01-14 10:46:08.000000000 +0100 @@ -1,3 +1,201 @@ +commit 95fdbe8337d2ff31dcfb68f35f3e4441dc27d92f +Author: Jean-Baptiste Kempf <j...@videolan.org> +Date: Sun Jan 14 10:45:31 2018 +0100 + + Update NEWS + +commit 230d8c8140316f1633cb48c11870938d5784b5b7 +Author: Pierre Lamot <pie...@videolabs.io> +Date: Tue Jan 9 15:52:17 2018 +0100 + + Don't abort if PGCN or PCN == 0 when reading VTS_PTT_SRPT + + Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org> + +commit 26cc345d57a2660fe2bfdb25be099ede233d7d48 +Author: Pierre Lamot <pie...@videolabs.io> +Date: Tue Jan 9 15:52:16 2018 +0100 + + Update incomplete structures + + From the spec. + + Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org> + +commit 22f0cd7398da14b85bdb20eef81309ad30ec8da8 +Author: Pierre Lamot <pie...@videolabs.io> +Date: Tue Jan 9 15:52:15 2018 +0100 + + Don't abort if PGC structure can't be read. + + Some DVD contains unused invalids PGC (ie: inaccessible location). + + Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org> + +commit 7433fb130827ada0e09a6b123b8a1df4fdf6bb40 +Author: Pierre Lamot <pie...@videolabs.io> +Date: Tue Jan 9 15:52:14 2018 +0100 + + Provide compatibility with media having incomplete TT_SRPT and PTT_SRPT + + Some media don't provide the last byte field in "Title Search Pointer Table" + (TT_SRPT) and "Video Title Set Part of Title Search Pointer Table" + (VST_PTT_SRPT) + + Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org> + +commit 74853950580354f0fba0e8bbae643068da9c3fb7 +Author: Jean-Baptiste Kempf <j...@videolan.org> +Date: Mon Jan 8 18:28:22 2018 +0100 + + Update NEWS for 6.0 + +commit 5ec409508803037dfa931591aef93851458d1d2a +Author: Lawrence D'Oliveiro <l...@geek-central.gen.nz> +Date: Fri Feb 19 16:16:09 2016 +0100 + + Restrict Exported Symbols To Those Currently Declared In Public Includes + + The shared library currently exports the symbols “dvdinput_close”, + “dvdinput_open”, “dvdinput_read”, “dvdinput_seek”, + “dvdinput_setup” and “dvdinput_title”, even though these are not + currently declared in any of the public include files. + + This restricts the export-symbols-regex to stop exporting these. + + Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org> + +commit 494311d309441846eae697f915b61d2980bfa69d +Author: Petri Hintukainen <phint...@gmail.com> +Date: Wed Oct 14 20:49:55 2015 +0300 + + Remove unused dvdinput_error() + +commit d52ac0a705e6969862d94b94729854108b7eb4b4 +Author: Petri Hintukainen <phint...@gmail.com> +Date: Wed Oct 14 14:03:33 2015 +0300 + + Remove redundant redeclaration of InternalUDFReadBlocksRaw + +commit 54c4660e7592e6f8e30d205b117dfc9b1e3997be +Author: Petri Hintukainen <phint...@gmail.com> +Date: Thu Sep 24 14:02:23 2015 +0300 + + dvdinput_close(): fix leak in error path + + Memory should be freed even if DVDCSS_close() or close() returns an error. + Error return value is only for diagnostics; those functions can't be called again. + => dvdinput_close() can't be called again. + +commit 32c6f60f29875a7ee05817ee81107bb5ca0ea7ae +Author: Petri Hintukainen <phint...@gmail.com> +Date: Thu Sep 24 14:01:51 2015 +0300 + + Use NULL when comparing pointer + +commit 5e2ffa4bd2f260cd68e064ada27aa21b042f8856 +Author: Jean-Baptiste Kempf <j...@videolan.org> +Date: Wed Sep 9 12:19:22 2015 +0200 + + Update NEWS + +commit d056043f4ba26944163c404421077ebfe3c8c60f +Author: Jean-Baptiste Kempf <j...@videolan.org> +Date: Wed Sep 9 12:17:46 2015 +0200 + + Next major version will be 6.0.0 + + Bump version to 5.90.0 for now + +commit 511ac9c8199d7b604d6a65193fd2777b74fad776 +Author: Jean-Baptiste Kempf <j...@videolan.org> +Date: Wed Sep 9 09:51:03 2015 +0200 + + Prepare for 5.0.4 + +commit 105aa319b085b3eb4f67de80cb41af27e0f2fe0f +Author: Petri Hintukainen <phint...@gmail.com> +Date: Mon Sep 7 14:46:31 2015 +0300 + + configure: generate version.h + + Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org> + +commit 752bbae6bc7b517f9819d182a2e3ddca44b112d8 +Author: Petri Hintukainen <phint...@gmail.com> +Date: Wed Sep 9 10:12:29 2015 +0300 + + DVDReadBytes(): Check that requested size fits in ssize_t + + Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org> + +commit 1d4a5ceef8e32659ae61fff4244d346c9f3453aa +Author: Petri Hintukainen <phint...@gmail.com> +Date: Wed Sep 9 10:11:16 2015 +0300 + + sprintf -> strcpy + + Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org> + +commit 08d1ca695b55121bb0e7e82e0fa21028196141a5 +Author: Petri Hintukainen <phint...@gmail.com> +Date: Wed Sep 9 10:10:26 2015 +0300 + + Add const + + Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org> + +commit 7247a1995bf8cb33fb716eab9dd57ad2a90a083e +Author: Jean-Baptiste Kempf <j...@videolan.org> +Date: Tue Sep 1 15:40:18 2015 +0200 + + Next version will be 5.0.4 (+ NEWS) + +commit 46ef934304b3a326615ae6dafc63b337f2f2628f +Author: Petri Hintukainen <phint...@gmail.com> +Date: Wed May 20 13:41:57 2015 +0300 + + Use calloc + + Remove redundant initializations to 0. + + Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org> + +commit 75c0cae2f32be6d7b076818571341dde83c1771b +Author: Petri Hintukainen <phint...@gmail.com> +Date: Wed May 20 13:41:38 2015 +0300 + + Use correct constant + + TITLES_MAX was used as length of string "/video_ts". + There's no relation between these two constants. + + Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org> + +commit a0b8b3e4e1e95131430149c24c75d19fb8219087 +Author: Petri Hintukainen <phint...@gmail.com> +Date: Wed May 20 13:41:01 2015 +0300 + + Fix possible buffer overflow + + Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org> + +commit 2b77f469eb511b8f43e8f9b10a3b57685ec1ff3c +Author: Petri Hintukainen <phint...@gmail.com> +Date: Wed May 20 13:40:27 2015 +0300 + + Cosmetics + + Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org> + +commit 4e269e52103a0422a3954ecc2f1901dec5fb4f0d +Author: Petri Hintukainen <phint...@gmail.com> +Date: Sun Mar 29 22:21:31 2015 +0300 + + Fix write after free + + Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org> + commit 2b8f60f0c4efd85f17116a5443851d4bb4a288b7 Author: Jean-Baptiste Kempf <j...@videolan.org> Date: Wed Mar 25 14:55:05 2015 +0100 @@ -970,7 +1168,7 @@ The memory is allocated in - if((cached_dir_base = malloc(dir_lba * DVD_VIDEO_LB_LEN + 2048)) == NULL) + if((cached_dir_base = malloc(dir_lba * DVD_VIDEO_LB_LEN + 2048)) == NULL) and has to be freed before returning from the function. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libdvdread-5.0.3/Makefile.am new/libdvdread-6.0.0/Makefile.am --- old/libdvdread-5.0.3/Makefile.am 2014-08-28 08:41:51.000000000 +0200 +++ new/libdvdread-6.0.0/Makefile.am 2016-05-19 22:49:19.000000000 +0200 @@ -1,6 +1,6 @@ ACLOCAL_AMFLAGS = -Im4 -AM_CPPFLAGS = -I$(top_srcdir)/src $(CSS_CFLAGS) +AM_CPPFLAGS = -I$(top_srcdir)/src -I$(top_builddir)/src/dvdread $(CSS_CFLAGS) dist_doc_DATA = AUTHORS ChangeLog COPYING NEWS README TODO @@ -34,7 +34,7 @@ libdvdread_la_LIBADD = $(CSS_LIBS) libdvdread_la_LDFLAGS = -version-info $(DVDREAD_LTVERSION) \ - -export-symbols-regex "(^dvd.*|^nav.*|^ifo.*|^DVD.*|^UDF.*)" + -export-symbols-regex "(^dvdread.*|^nav.*|^ifo.*|^DVD.*|^UDF.*)" pkgincludedir = $(includedir)/dvdread pkginclude_HEADERS = \ @@ -46,7 +46,8 @@ src/dvdread/ifo_types.h \ src/dvdread/nav_print.h \ src/dvdread/nav_read.h \ - src/dvdread/nav_types.h + src/dvdread/nav_types.h \ + src/dvdread/version.h pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = misc/dvdread.pc diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libdvdread-5.0.3/NEWS new/libdvdread-6.0.0/NEWS --- old/libdvdread-5.0.3/NEWS 2015-03-25 14:55:03.000000000 +0100 +++ new/libdvdread-6.0.0/NEWS 2018-01-14 10:45:26.000000000 +0100 @@ -1,10 +1,19 @@ +libdvdread (6.0.0) + * restrict the number of symbols to be exposed to the shared-object + * remove dvdinput_error function + * improve compatibility with some DVDs (notably the eOne ones) + * fix write after free in ifoFree functions + * fix possible buffer overflow in open + * additional checks on DVDReadBytes arguments + * fix leaks + libdvdread (5.0.3) - * Cache IFO and BUP files (only for ImageFiles) in order to reduce the number + * cache IFO and BUP files (only for ImageFiles) in order to reduce the number of read/seek access - * Fix compilation warnings for OS/2 + * fix compilation warnings for OS/2 libdvdread (5.0.2) - * Add DVDOpenStream to open a dvd from a set of callbacks + * add DVDOpenStream to open a dvd from a set of callbacks libdvdread (5.0.1) * support DragonFly BSD bswap diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libdvdread-5.0.3/configure.ac new/libdvdread-6.0.0/configure.ac --- old/libdvdread-5.0.3/configure.ac 2015-03-14 19:09:18.000000000 +0100 +++ new/libdvdread-6.0.0/configure.ac 2018-01-08 18:28:17.000000000 +0100 @@ -1,4 +1,11 @@ -AC_INIT(libdvdread, 5.0.3) +dnl library version number +m4_define([dvdread_major], 6) +m4_define([dvdread_minor], 0) +m4_define([dvdread_micro], 0) +m4_define([dvdread_version],[dvdread_major.dvdread_minor.dvdread_micro]) + +AC_INIT(libdvdread, dvdread_version) + AC_CONFIG_SRCDIR([src/dvd_reader.c]) AC_PREREQ(2.53) @@ -105,6 +112,14 @@ AC_DEFINE([UNUSED], [], [Unused parameter annotation]) ]) +dnl export library version number +DVDREAD_VERSION_MAJOR=dvdread_major() +DVDREAD_VERSION_MINOR=dvdread_minor() +DVDREAD_VERSION_MICRO=dvdread_micro() +AC_SUBST(DVDREAD_VERSION_MAJOR) +AC_SUBST(DVDREAD_VERSION_MINOR) +AC_SUBST(DVDREAD_VERSION_MICRO) + dnl --------------------------------------------- dnl Output configuration files dnl --------------------------------------------- @@ -112,4 +127,5 @@ Makefile doc/doxygen.cfg misc/dvdread.pc +src/dvdread/version.h ]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libdvdread-5.0.3/m4/libtool.m4 new/libdvdread-6.0.0/m4/libtool.m4 --- old/libdvdread-5.0.3/m4/libtool.m4 2015-03-14 19:08:05.000000000 +0100 +++ new/libdvdread-6.0.0/m4/libtool.m4 2018-01-17 22:26:04.000000000 +0100 @@ -728,7 +728,6 @@ cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. @@ -2887,6 +2886,18 @@ dynamic_linker='GNU/Linux ld.so' ;; +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + netbsd*) version_type=sunos need_lib_prefix=no @@ -3546,7 +3557,7 @@ lt_cv_deplibs_check_method=pass_all ;; -netbsd*) +netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else @@ -4424,7 +4435,7 @@ ;; esac ;; - netbsd*) + netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise @@ -4936,6 +4947,9 @@ ;; esac ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; @@ -4998,6 +5012,9 @@ openbsd* | bitrig*) with_gnu_ld=no ;; + linux* | k*bsd*-gnu | gnu*) + _LT_TAGVAR(link_all_deplibs, $1)=no + ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes @@ -5252,7 +5269,7 @@ fi ;; - netbsd*) + netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= @@ -5773,6 +5790,7 @@ if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi + _LT_TAGVAR(link_all_deplibs, $1)=no else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' @@ -5794,7 +5812,7 @@ esac ;; - netbsd*) + netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libdvdread-5.0.3/src/dvd_input.c new/libdvdread-6.0.0/src/dvd_input.c --- old/libdvdread-5.0.3/src/dvd_input.c 2015-01-28 17:17:27.000000000 +0100 +++ new/libdvdread-6.0.0/src/dvd_input.c 2016-05-19 22:49:19.000000000 +0200 @@ -35,7 +35,6 @@ int (*dvdinput_seek) (dvd_input_t, int); int (*dvdinput_title) (dvd_input_t, int); int (*dvdinput_read) (dvd_input_t, void *, int, int); -char * (*dvdinput_error) (dvd_input_t); #ifdef HAVE_DVDCSS_DVDCSS_H /* linking to libdvdcss */ @@ -46,18 +45,17 @@ # define DVDcss_close dvdcss_close # define DVDcss_seek dvdcss_seek # define DVDcss_read dvdcss_read -# define DVDcss_error dvdcss_error #else /* dlopening libdvdcss */ # if defined(HAVE_DLFCN_H) && !defined(USING_BUILTIN_DLFCN) # include <dlfcn.h> # else -# if defined(WIN32) +# if defined(WIN32) /* Only needed on MINGW at the moment */ -# include "../msvc/contrib/dlfcn.c" +# include "../msvc/contrib/dlfcn.c" +# endif # endif -#endif typedef struct dvdcss_s *dvdcss_t; typedef struct dvdcss_stream_cb dvdcss_stream_cb; @@ -66,7 +64,6 @@ static int (*DVDcss_close) (dvdcss_t); static int (*DVDcss_seek) (dvdcss_t, int, int); static int (*DVDcss_read) (dvdcss_t, void *, int, int); -static char * (*DVDcss_error) (dvdcss_t); #define DVDCSS_SEEK_KEY (1 << 1) #endif @@ -107,7 +104,7 @@ NULL; #endif } - if(dev->dvdcss == 0) { + if(dev->dvdcss == NULL) { fprintf(stderr, "libdvdread: Could not open %s with libdvdcss.\n", target); free(dev); return NULL; @@ -117,14 +114,6 @@ } /** - * return the last error message - */ -static char *css_error(dvd_input_t dev) -{ - return DVDcss_error(dev->dvdcss); -} - -/** * seek into the device. */ static int css_seek(dvd_input_t dev, int blocks) @@ -158,12 +147,9 @@ ret = DVDcss_close(dev->dvdcss); - if(ret < 0) - return ret; - free(dev); - return 0; + return ret; } /** @@ -200,15 +186,6 @@ } /** - * return the last error message - */ -static char *file_error(dvd_input_t dev UNUSED) -{ - /* use strerror(errno)? */ - return (char *)"unknown error"; -} - -/** * seek into the device. */ static int file_seek(dvd_input_t dev, int blocks) @@ -278,12 +255,9 @@ ret = close(dev->fd); - if(ret < 0) - return ret; - free(dev); - return 0; + return ret; } @@ -328,8 +302,6 @@ dlsym(dvdcss_library, U_S "dvdcss_seek"); DVDcss_read = (int (*)(dvdcss_t, void*, int, int)) dlsym(dvdcss_library, U_S "dvdcss_read"); - DVDcss_error = (char* (*)(dvdcss_t)) - dlsym(dvdcss_library, U_S "dvdcss_error"); if(dlsym(dvdcss_library, U_S "dvdcss_crack")) { fprintf(stderr, @@ -339,7 +311,7 @@ dlclose(dvdcss_library); dvdcss_library = NULL; } else if(!DVDcss_open || !DVDcss_close || !DVDcss_seek - || !DVDcss_read || !DVDcss_error) { + || !DVDcss_read) { fprintf(stderr, "libdvdread: Missing symbols in %s, " "this shouldn't happen !\n", CSS_LIB); dlclose(dvdcss_library); @@ -362,7 +334,6 @@ dvdinput_seek = css_seek; dvdinput_title = css_title; dvdinput_read = css_read; - dvdinput_error = css_error; return 1; } else { @@ -374,7 +345,6 @@ dvdinput_seek = file_seek; dvdinput_title = file_title; dvdinput_read = file_read; - dvdinput_error = file_error; return 0; } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libdvdread-5.0.3/src/dvd_input.h new/libdvdread-6.0.0/src/dvd_input.h --- old/libdvdread-5.0.3/src/dvd_input.h 2015-01-27 16:24:31.000000000 +0100 +++ new/libdvdread-6.0.0/src/dvd_input.h 2016-05-19 22:49:19.000000000 +0200 @@ -61,7 +61,6 @@ extern int (*dvdinput_seek) (dvd_input_t, int); extern int (*dvdinput_title) (dvd_input_t, int); extern int (*dvdinput_read) (dvd_input_t, void *, int, int); -extern char * (*dvdinput_error) (dvd_input_t); /** * Setup function accessed by dvd_reader.c. Returns 1 if there is CSS support. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libdvdread-5.0.3/src/dvd_reader.c new/libdvdread-6.0.0/src/dvd_reader.c --- old/libdvdread-5.0.3/src/dvd_reader.c 2015-03-14 19:09:18.000000000 +0100 +++ new/libdvdread-6.0.0/src/dvd_reader.c 2018-01-17 22:35:39.000000000 +0100 @@ -124,10 +124,6 @@ unsigned char *cache; }; -int InternalUDFReadBlocksRaw( const dvd_reader_t *device, uint32_t lb_number, - size_t block_count, unsigned char *data, - int encrypted ); - /** * Set the level of caching on udf * level = 0 (no caching) @@ -173,7 +169,7 @@ uint32_t start, len; int title; - char *nokeys_str = getenv("DVDREAD_NOKEYS"); + const char *nokeys_str = getenv("DVDREAD_NOKEYS"); if(nokeys_str != NULL) return 0; @@ -249,18 +245,15 @@ return NULL; } - dvd = malloc( sizeof( dvd_reader_t ) ); + dvd = calloc( 1, sizeof( dvd_reader_t ) ); if( !dvd ) { dvdinput_close(dev); return NULL; } - memset( dvd, 0, sizeof( dvd_reader_t ) ); dvd->isImageFile = 1; dvd->dev = dev; - dvd->path_root = NULL; dvd->udfcache_level = DEFAULT_UDF_CACHE_LEVEL; - dvd->udfcache = NULL; if( have_css ) { /* Only if DVDCSS_METHOD = title, a bit if it's disc or if @@ -269,7 +262,6 @@ dvd->css_state = 1; /* Need key init. */ } - dvd->css_title = 0; return dvd; } @@ -278,20 +270,14 @@ { dvd_reader_t *dvd; - dvd = malloc( sizeof( dvd_reader_t ) ); + dvd = calloc( 1, sizeof( dvd_reader_t ) ); if( !dvd ) return NULL; - dvd->isImageFile = 0; - dvd->dev = 0; dvd->path_root = strdup( path_root ); if(!dvd->path_root) { free(dvd); return NULL; } dvd->udfcache_level = DEFAULT_UDF_CACHE_LEVEL; - dvd->udfcache = NULL; - - dvd->css_state = 0; /* Only used in the UDF path */ - dvd->css_title = 0; /* Only matters in the UDF path */ return dvd; } @@ -374,7 +360,7 @@ if( ppath == NULL ) goto DVDOpen_error; - path = strdup(ppath); + path = strdup(ppath); if( path == NULL ) goto DVDOpen_error; @@ -398,9 +384,9 @@ /* maybe "host:port" url? try opening it with acCeSS library */ if( strchr(path,':') ) { - ret_val = DVDOpenImageFile( path, NULL, NULL, have_css ); - free(path); - return ret_val; + ret_val = DVDOpenImageFile( path, NULL, NULL, have_css ); + free(path); + return ret_val; } /* If we can't stat the file, give up */ @@ -484,22 +470,23 @@ } #if defined(_WIN32) || defined(__OS2__) - if(strlen(path_copy) > TITLES_MAX) { - if(!strcasecmp(&(path_copy[strlen( path_copy ) - TITLES_MAX]), + if( strlen( path_copy ) > 9 ) { + if( !strcasecmp( &(path_copy[ strlen( path_copy ) - 9 ]), "\\video_ts")) - path_copy[strlen(path_copy) - (TITLES_MAX-1)] = '\0'; + path_copy[ strlen( path_copy ) - (9-1) ] = '\0'; } #endif - if( strlen( path_copy ) > TITLES_MAX ) { - if( !strcasecmp( &(path_copy[ strlen( path_copy ) - TITLES_MAX ]), + if( strlen( path_copy ) > 9 ) { + if( !strcasecmp( &(path_copy[ strlen( path_copy ) - 9 ]), "/video_ts" ) ) { - path_copy[ strlen( path_copy ) - TITLES_MAX ] = '\0'; + path_copy[ strlen( path_copy ) - 9 ] = '\0'; } } if(path_copy[0] == '\0') { - path_copy[0] = '/'; - path_copy[1] = '\0'; + free( path_copy ); + if( !(path_copy = strdup( "/" ) ) ) + goto DVDOpen_error; } #if defined(__APPLE__) @@ -651,7 +638,7 @@ /** * Open an unencrypted file on a DVD image file. */ -static dvd_file_t *DVDOpenFileUDF( dvd_reader_t *dvd, char *filename, +static dvd_file_t *DVDOpenFileUDF( dvd_reader_t *dvd, const char *filename, int do_cache ) { uint32_t start, len; @@ -663,18 +650,14 @@ return NULL; } - dvd_file = malloc( sizeof( dvd_file_t ) ); + dvd_file = calloc( 1, sizeof( dvd_file_t ) ); if( !dvd_file ) { fprintf( stderr, "libdvdread:DVDOpenFileUDF:malloc failed\n" ); return NULL; } dvd_file->dvd = dvd; dvd_file->lb_start = start; - dvd_file->seek_pos = 0; - memset( dvd_file->title_sizes, 0, sizeof( dvd_file->title_sizes ) ); - memset( dvd_file->title_devs, 0, sizeof( dvd_file->title_devs ) ); dvd_file->filesize = len / DVD_VIDEO_LB_LEN; - dvd_file->cache = NULL; /* Read the whole file in cache (unencrypted) if asked and if it doesn't * exceed 128KB */ @@ -759,7 +742,7 @@ /** * Open an unencrypted file from a DVD directory tree. */ -static dvd_file_t *DVDOpenFilePath( dvd_reader_t *dvd, char *filename ) +static dvd_file_t *DVDOpenFilePath( dvd_reader_t *dvd, const char *filename ) { char full_path[ PATH_MAX + 1 ]; dvd_file_t *dvd_file; @@ -778,19 +761,13 @@ return NULL; } - dvd_file = malloc( sizeof( dvd_file_t ) ); + dvd_file = calloc( 1, sizeof( dvd_file_t ) ); if( !dvd_file ) { fprintf( stderr, "libdvdread:DVDOpenFilePath:dvd_file malloc failed\n" ); dvdinput_close(dev); return NULL; } dvd_file->dvd = dvd; - dvd_file->lb_start = 0; - dvd_file->seek_pos = 0; - memset( dvd_file->title_sizes, 0, sizeof( dvd_file->title_sizes ) ); - memset( dvd_file->title_devs, 0, sizeof( dvd_file->title_devs ) ); - dvd_file->filesize = 0; - dvd_file->cache = NULL; if( stat( full_path, &fileinfo ) < 0 ) { fprintf( stderr, "libdvdread: Can't stat() %s.\n", filename ); @@ -812,23 +789,19 @@ dvd_file_t *dvd_file; if( title == 0 ) { - sprintf( filename, "/VIDEO_TS/VIDEO_TS.VOB" ); + strcpy( filename, "/VIDEO_TS/VIDEO_TS.VOB" ); } else { sprintf( filename, "/VIDEO_TS/VTS_%02d_%d.VOB", title, menu ? 0 : 1 ); } start = UDFFindFile( dvd, filename, &len ); if( start == 0 ) return NULL; - dvd_file = malloc( sizeof( dvd_file_t ) ); + dvd_file = calloc( 1, sizeof( dvd_file_t ) ); if( !dvd_file ) return NULL; dvd_file->dvd = dvd; /*Hack*/ dvd_file->css_title = title << 1 | menu; dvd_file->lb_start = start; - dvd_file->seek_pos = 0; - memset( dvd_file->title_sizes, 0, sizeof( dvd_file->title_sizes ) ); - memset( dvd_file->title_devs, 0, sizeof( dvd_file->title_devs ) ); dvd_file->filesize = len / DVD_VIDEO_LB_LEN; - dvd_file->cache = NULL; /* Calculate the complete file size for every file in the VOBS */ if( !menu ) { @@ -862,22 +835,16 @@ struct stat fileinfo; dvd_file_t *dvd_file; - dvd_file = malloc( sizeof( dvd_file_t ) ); + dvd_file = calloc( 1, sizeof( dvd_file_t ) ); if( !dvd_file ) return NULL; dvd_file->dvd = dvd; /*Hack*/ dvd_file->css_title = title << 1 | menu; - dvd_file->lb_start = 0; - dvd_file->seek_pos = 0; - memset( dvd_file->title_sizes, 0, sizeof( dvd_file->title_sizes ) ); - memset( dvd_file->title_devs, 0, sizeof( dvd_file->title_devs ) ); - dvd_file->filesize = 0; - dvd_file->cache = NULL; if( menu ) { dvd_input_t dev; if( title == 0 ) { - sprintf( filename, "VIDEO_TS.VOB" ); + strcpy( filename, "VIDEO_TS.VOB" ); } else { sprintf( filename, "VTS_%02i_0.VOB", title ); } @@ -945,7 +912,7 @@ switch( domain ) { case DVD_READ_INFO_FILE: if( titlenum == 0 ) { - sprintf( filename, "/VIDEO_TS/VIDEO_TS.IFO" ); + strcpy( filename, "/VIDEO_TS/VIDEO_TS.IFO" ); } else { sprintf( filename, "/VIDEO_TS/VTS_%02i_0.IFO", titlenum ); } @@ -953,7 +920,7 @@ break; case DVD_READ_INFO_BACKUP_FILE: if( titlenum == 0 ) { - sprintf( filename, "/VIDEO_TS/VIDEO_TS.BUP" ); + strcpy( filename, "/VIDEO_TS/VIDEO_TS.BUP" ); } else { sprintf( filename, "/VIDEO_TS/VTS_%02i_0.BUP", titlenum ); } @@ -1016,7 +983,7 @@ int n; if( title == 0 ) - sprintf( filename, "/VIDEO_TS/VIDEO_TS.VOB" ); + strcpy( filename, "/VIDEO_TS/VIDEO_TS.VOB" ); else sprintf( filename, "/VIDEO_TS/VTS_%02d_%d.VOB", title, menu ? 0 : 1 ); @@ -1062,7 +1029,7 @@ int n; if( title == 0 ) - sprintf( filename, "VIDEO_TS.VOB" ); + strcpy( filename, "VIDEO_TS.VOB" ); else sprintf( filename, "VTS_%02d_%d.VOB", title, menu ? 0 : 1 ); @@ -1121,14 +1088,14 @@ switch( domain ) { case DVD_READ_INFO_FILE: if( titlenum == 0 ) - sprintf( filename, "/VIDEO_TS/VIDEO_TS.IFO" ); + strcpy( filename, "/VIDEO_TS/VIDEO_TS.IFO" ); else sprintf( filename, "/VIDEO_TS/VTS_%02i_0.IFO", titlenum ); break; case DVD_READ_INFO_BACKUP_FILE: if( titlenum == 0 ) - sprintf( filename, "/VIDEO_TS/VIDEO_TS.BUP" ); + strcpy( filename, "/VIDEO_TS/VIDEO_TS.BUP" ); else sprintf( filename, "/VIDEO_TS/VTS_%02i_0.BUP", titlenum ); @@ -1383,7 +1350,7 @@ int ret; /* Check arguments. */ - if( dvd_file == NULL || data == NULL ) + if( dvd_file == NULL || data == NULL || (ssize_t)byte_size < 0 ) return -1; seek_sector = dvd_file->seek_pos / DVD_VIDEO_LB_LEN; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libdvdread-5.0.3/src/dvd_udf.c new/libdvdread-6.0.0/src/dvd_udf.c --- old/libdvdread-5.0.3/src/dvd_udf.c 2014-12-03 16:40:14.000000000 +0100 +++ new/libdvdread-6.0.0/src/dvd_udf.c 2015-09-09 09:48:14.000000000 +0200 @@ -794,7 +794,7 @@ return part->valid; } -uint32_t UDFFindFile( dvd_reader_t *device, char *filename, +uint32_t UDFFindFile( dvd_reader_t *device, const char *filename, uint32_t *filesize ) { uint8_t LogBlock_base[ DVD_VIDEO_LB_LEN + 2048 ]; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libdvdread-5.0.3/src/dvdread/dvd_reader.h new/libdvdread-6.0.0/src/dvdread/dvd_reader.h --- old/libdvdread-5.0.3/src/dvdread/dvd_reader.h 2015-03-25 14:32:32.000000000 +0100 +++ new/libdvdread-6.0.0/src/dvdread/dvd_reader.h 2016-05-19 22:49:19.000000000 +0200 @@ -43,7 +43,7 @@ /** * The current version. */ -#define DVDREAD_VERSION 50300 +#include "version.h" /** * The length of one Logical Block of a DVD. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libdvdread-5.0.3/src/dvdread/dvd_udf.h new/libdvdread-6.0.0/src/dvdread/dvd_udf.h --- old/libdvdread-5.0.3/src/dvdread/dvd_udf.h 2014-01-02 16:38:07.000000000 +0100 +++ new/libdvdread-6.0.0/src/dvdread/dvd_udf.h 2015-09-09 09:48:14.000000000 +0200 @@ -46,7 +46,7 @@ * '/VIDEO_TS/VTS_01_1.IFO'. On success, filesize will be set to the size of * the file in bytes. */ -uint32_t UDFFindFile( dvd_reader_t *device, char *filename, uint32_t *size ); +uint32_t UDFFindFile( dvd_reader_t *device, const char *filename, uint32_t *size ); int UDFGetVolumeIdentifier(dvd_reader_t *device, char *volid, unsigned int volid_size); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libdvdread-5.0.3/src/dvdread/ifo_types.h new/libdvdread-6.0.0/src/dvdread/ifo_types.h --- old/libdvdread-5.0.3/src/dvdread/ifo_types.h 2015-01-29 13:37:56.000000000 +0100 +++ new/libdvdread-6.0.0/src/dvdread/ifo_types.h 2018-01-14 10:44:49.000000000 +0100 @@ -215,10 +215,10 @@ unsigned int interleaved : 1; unsigned int stc_discontinuity: 1; unsigned int seamless_angle : 1; - + unsigned int zero_1 : 1; unsigned int playback_mode : 1; /**< When set, enter StillMode after each VOBU */ unsigned int restricted : 1; /**< ?? drop out of fastforward? */ - unsigned int unknown2 : 6; + unsigned int cell_type : 5; /** for karaoke, reserved otherwise */ uint8_t still_time; uint8_t cell_cmd_nr; dvd_time_t playback_time; @@ -316,7 +316,7 @@ uint8_t entry_id; unsigned int block_mode : 2; unsigned int block_type : 2; - unsigned int unknown1 : 4; + unsigned int zero_1 : 4; uint16_t ptl_id_mask; uint32_t pgc_start_byte; pgc_t *pgc; @@ -578,7 +578,8 @@ */ typedef struct { uint16_t lang_code; - uint16_t unknown; /* 0x0001, title 1? disc 1? side 1? */ + uint8_t zero_1; + uint8_t char_set; /* 0x00 reserved Unicode, 0x01 ISO 646, 0x10 JIS Roman & JIS Kanji, 0x11 ISO 8859-1, 0x12 Shift JIS Kanji */ uint32_t txtdt_start_byte; /* prt, rel start of vmg_txtdt_mgi */ txtdt_t *txtdt; } ATTRIBUTE_PACKED txtdt_lu_t; @@ -588,8 +589,9 @@ * Text Data Manager Information. (Incomplete) */ typedef struct { - char disc_name[14]; /* how many bytes?? */ - uint16_t nr_of_language_units; /* 32bit?? */ + char disc_name[12]; + uint16_t zero_1; + uint16_t nr_of_language_units; uint32_t last_byte; txtdt_lu_t *lu; } ATTRIBUTE_PACKED txtdt_mgi_t; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libdvdread-5.0.3/src/dvdread/version.h new/libdvdread-6.0.0/src/dvdread/version.h --- old/libdvdread-5.0.3/src/dvdread/version.h 1970-01-01 01:00:00.000000000 +0100 +++ new/libdvdread-6.0.0/src/dvdread/version.h 2018-01-17 22:26:19.000000000 +0100 @@ -0,0 +1,37 @@ +/* + * This file is part of libdvdread + * Copyright (C) 2015 VideoLAN + * + * This file is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + */ + +#ifndef DVDREAD_VERSION_H_ +#define DVDREAD_VERSION_H_ + +#define DVDREAD_VERSION_CODE(major, minor, micro) \ + (((major) * 10000) + \ + ((minor) * 100) + \ + ((micro) * 1)) + +#define DVDREAD_VERSION_MAJOR 6 +#define DVDREAD_VERSION_MINOR 0 +#define DVDREAD_VERSION_MICRO 0 + +#define DVDREAD_VERSION_STRING "6.0.0" + +#define DVDREAD_VERSION \ + DVDREAD_VERSION_CODE(DVDREAD_VERSION_MAJOR, DVDREAD_VERSION_MINOR, DVDREAD_VERSION_MICRO) + +#endif /* DVDREAD_VERSION_H_ */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libdvdread-5.0.3/src/dvdread/version.h.in new/libdvdread-6.0.0/src/dvdread/version.h.in --- old/libdvdread-5.0.3/src/dvdread/version.h.in 1970-01-01 01:00:00.000000000 +0100 +++ new/libdvdread-6.0.0/src/dvdread/version.h.in 2016-05-19 22:49:19.000000000 +0200 @@ -0,0 +1,37 @@ +/* + * This file is part of libdvdread + * Copyright (C) 2015 VideoLAN + * + * This file is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + */ + +#ifndef DVDREAD_VERSION_H_ +#define DVDREAD_VERSION_H_ + +#define DVDREAD_VERSION_CODE(major, minor, micro) \ + (((major) * 10000) + \ + ((minor) * 100) + \ + ((micro) * 1)) + +#define DVDREAD_VERSION_MAJOR @DVDREAD_VERSION_MAJOR@ +#define DVDREAD_VERSION_MINOR @DVDREAD_VERSION_MINOR@ +#define DVDREAD_VERSION_MICRO @DVDREAD_VERSION_MICRO@ + +#define DVDREAD_VERSION_STRING "@DVDREAD_VERSION_MAJOR@.@DVDREAD_VERSION_MINOR@.@DVDREAD_VERSION_MICRO@" + +#define DVDREAD_VERSION \ + DVDREAD_VERSION_CODE(DVDREAD_VERSION_MAJOR, DVDREAD_VERSION_MINOR, DVDREAD_VERSION_MICRO) + +#endif /* DVDREAD_VERSION_H_ */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libdvdread-5.0.3/src/ifo_print.c new/libdvdread-6.0.0/src/ifo_print.c --- old/libdvdread-5.0.3/src/ifo_print.c 2014-10-24 16:28:44.000000000 +0200 +++ new/libdvdread-6.0.0/src/ifo_print.c 2018-01-14 10:44:49.000000000 +0100 @@ -702,8 +702,8 @@ printf("only still VOBUs "); if(cell_playback[i].restricted) printf("restricted cell "); - if(cell_playback[i].unknown2) - printf("Unknown 0x%x ", cell_playback[i].unknown2); + if(cell_playback[i].cell_type) + printf("cell type 0x%x ", cell_playback[i].cell_type); if(cell_playback[i].still_time) printf("still time %d ", cell_playback[i].still_time); if(cell_playback[i].cell_cmd_nr) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/libdvdread-5.0.3/src/ifo_read.c new/libdvdread-6.0.0/src/ifo_read.c --- old/libdvdread-5.0.3/src/ifo_read.c 2015-01-21 17:22:42.000000000 +0100 +++ new/libdvdread-6.0.0/src/ifo_read.c 2018-01-14 10:44:49.000000000 +0100 @@ -228,7 +228,7 @@ ps->entry_id = dvdread_getbits(&state, 8); ps->block_mode = dvdread_getbits(&state, 2); ps->block_type = dvdread_getbits(&state, 2); - ps->unknown1 = dvdread_getbits(&state, 4); + ps->zero_1 = dvdread_getbits(&state, 4); ps->ptl_id_mask = dvdread_getbits(&state, 16); ps->pgc_start_byte = dvdread_getbits(&state, 32); } @@ -245,9 +245,10 @@ cp->interleaved = dvdread_getbits(&state, 1); cp->stc_discontinuity = dvdread_getbits(&state, 1); cp->seamless_angle = dvdread_getbits(&state, 1); + cp->zero_1 = dvdread_getbits(&state, 1); cp->playback_mode = dvdread_getbits(&state, 1); cp->restricted = dvdread_getbits(&state, 1); - cp->unknown2 = dvdread_getbits(&state, 6); + cp->cell_type = dvdread_getbits(&state, 5); cp->still_time = dvdread_getbits(&state, 8); cp->cell_cmd_nr = dvdread_getbits(&state, 8); @@ -1048,6 +1049,10 @@ B2N_16(tt_srpt->nr_of_srpts); B2N_32(tt_srpt->last_byte); + /* E-One releases don't fill this field */ + if(tt_srpt->last_byte == 0) { + tt_srpt->last_byte = tt_srpt->nr_of_srpts * sizeof(title_info_t) - 1 + TT_SRPT_SIZE; + } info_length = tt_srpt->last_byte + 1 - TT_SRPT_SIZE; tt_srpt->title = calloc(1, info_length); @@ -1118,8 +1123,8 @@ if(ifofile->tt_srpt) { free(ifofile->tt_srpt->title); - free(ifofile->tt_srpt); ifofile->tt_srpt->title = NULL; + free(ifofile->tt_srpt); ifofile->tt_srpt = NULL; } } @@ -1162,6 +1167,10 @@ CHECK_VALUE(vts_ptt_srpt->nr_of_srpts != 0); CHECK_VALUE(vts_ptt_srpt->nr_of_srpts < 100); /* ?? */ + /* E-One releases don't fill this field */ + if(vts_ptt_srpt->last_byte == 0) { + vts_ptt_srpt->last_byte = vts_ptt_srpt->nr_of_srpts * sizeof(*data) - 1 + VTS_PTT_SRPT_SIZE; + } info_length = vts_ptt_srpt->last_byte + 1 - VTS_PTT_SRPT_SIZE; data = calloc(1, info_length); if(!data) @@ -1254,13 +1263,7 @@ CHECK_VALUE(vts_ptt_srpt->title[i].ptt[j].pgcn < 1000); /* ?? */ CHECK_VALUE(vts_ptt_srpt->title[i].ptt[j].pgn != 0); CHECK_VALUE(vts_ptt_srpt->title[i].ptt[j].pgn < 100); /* ?? */ - if (vts_ptt_srpt->title[i].ptt[j].pgcn == 0 || - vts_ptt_srpt->title[i].ptt[j].pgcn >= 1000 || - vts_ptt_srpt->title[i].ptt[j].pgn == 0 || - vts_ptt_srpt->title[i].ptt[j].pgn >= 100) { - return 0; - } - + //don't abort here. E-One DVDs contain PTT with pgcn or pgn == 0 } } @@ -1895,7 +1898,7 @@ memcpy(&pgcit->pgci_srp[i], ptr, PGCI_SRP_SIZE); ptr += PGCI_SRP_SIZE; read_pgci_srp(&pgcit->pgci_srp[i]); - CHECK_VALUE(pgcit->pgci_srp[i].unknown1 == 0); + CHECK_VALUE(pgcit->pgci_srp[i].zero_1 == 0); } free(data); @@ -1920,12 +1923,10 @@ pgcit->pgci_srp[i].pgc->ref_count = 1; if(!ifoRead_PGC(ifofile, pgcit->pgci_srp[i].pgc, offset + pgcit->pgci_srp[i].pgc_start_byte)) { - int j; - for(j = 0; j <= i; j++) { - ifoFree_PGC(&pgcit->pgci_srp[j].pgc); - } + fprintf(stderr, "libdvdread: Unable to read invalid PCG\n"); + //E-One releases provide boggus PGC, ie: out of bound start_byte free(pgcit->pgci_srp[i].pgc); - goto fail; + pgcit->pgci_srp[i].pgc = NULL; } }