From ec0175a143a4ada39a76959a1d3417570a876b25 Mon Sep 17 00:00:00 2001 From: Fabian Keil Date: Fri, 27 Jul 2012 14:05:57 +0200 Subject: [PATCH 2/2] Update sysutils/dvdbackup to 0.4.2 While at it set DEFAULT_DVD_DEVICE to /dev/cd0 and fix a segfault when mirroring the disc fails. --- sysutils/dvdbackup/Makefile | 5 +- sysutils/dvdbackup/distinfo | 4 +- sysutils/dvdbackup/files/patch-src::dvdbackup.c | 66 +++++++++++------------ 3 files changed, 34 insertions(+), 41 deletions(-) diff --git sysutils/dvdbackup/Makefile sysutils/dvdbackup/Makefile index 95d5775..dc4925b 100644 --- sysutils/dvdbackup/Makefile +++ sysutils/dvdbackup/Makefile @@ -6,8 +6,7 @@ # PORTNAME= dvdbackup -PORTVERSION= 0.4.1 -PORTREVISION= 2 +PORTVERSION= 0.4.2 CATEGORIES= sysutils multimedia MASTER_SITES= SF/${PORTNAME}/${PORTNAME}/${PORTNAME}-${PORTVERSION} @@ -27,7 +26,7 @@ LDFLAGS+= -L${LOCALBASE}/lib MAN1= dvdbackup.1 PORTDOCS= NEWS README -DEFAULT_DVD_DEVICE?= /dev/acd0 +DEFAULT_DVD_DEVICE?= /dev/cd0 .if !defined(WITHOUT_NLS) USE_GETTEXT= yes diff --git sysutils/dvdbackup/distinfo sysutils/dvdbackup/distinfo index 70eca05..6c3e308 100644 --- sysutils/dvdbackup/distinfo +++ sysutils/dvdbackup/distinfo @@ -1,2 +1,2 @@ -SHA256 (dvdbackup-0.4.1.tar.gz) = ac9138b3265ef7f113d139e68130663937ce25322ae00922f74bab55aa63347b -SIZE (dvdbackup-0.4.1.tar.gz) = 232885 +SHA256 (dvdbackup-0.4.2.tar.gz) = 0a37c31cc6f2d3c146ec57064bda8a06cf5f2ec90455366cb250506bab964550 +SIZE (dvdbackup-0.4.2.tar.gz) = 267049 diff --git sysutils/dvdbackup/files/patch-src::dvdbackup.c sysutils/dvdbackup/files/patch-src::dvdbackup.c index 5c509eb..09df013 100644 --- sysutils/dvdbackup/files/patch-src::dvdbackup.c +++ sysutils/dvdbackup/files/patch-src::dvdbackup.c @@ -1,42 +1,36 @@ ---- src/dvdbackup.c.orig 2010-09-16 22:10:04.307951355 +0200 -+++ src/dvdbackup.c 2010-09-16 22:19:49.112413564 +0200 -@@ -99,7 +99,8 @@ +From 174f78e556d83458e34558a95cebd4d1d0960818 Mon Sep 17 00:00:00 2001 +From: Fabian Keil +Date: Tue, 10 Jul 2012 19:12:13 +0200 +Subject: [PATCH] Keep the _dvd opened if DVDGetFileSet() fails in + DVDMirrorTitleSet() or DVDMirror() + +The _dvd is always closed in main() and doing it twice +results in double frees and depending on the malloc +options used segmentation faults. +--- + src/dvdbackup.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git src/dvdbackup.c src/dvdbackup.c +index 1ac96a5..ad411ea 100644 +--- src/dvdbackup.c ++++ src/dvdbackup.c +@@ -1547,7 +1547,6 @@ int DVDMirror(dvd_reader_t * _dvd, char * targetdir,char * title_name, read_erro - - static int CheckSizeArray(const int size_array[], int reference, int target) { -- if ( (size_array[reference]/size_array[target] == 1) && -+ if ( size_array[target] && -+ (size_array[reference]/size_array[target] == 1) && - ((size_array[reference] * 2 - size_array[target])/ size_array[target] == 1) && - ((size_array[reference]%size_array[target] * 3) < size_array[reference]) ) { - /* We have a dual DVD with two feature films - now let's see if they have the same amount of chapters*/ -@@ -1264,7 +1265,7 @@ - - /* Seek to title of first track, which is at (track_no * 32768) + 40 */ - -- if ( 32808 != lseek(filehandle, 32808, SEEK_SET) ) { -+ if ( 32768 != lseek(filehandle, 32768, SEEK_SET) ) { - close(filehandle); - fprintf(stderr, _("Cannot seek DVD device %s - check your DVD device\n"), device); + title_set_info = DVDGetFileSet(_dvd); + if (!title_set_info) { +- DVDClose(_dvd); return(1); -@@ -1272,10 +1273,16 @@ + } - /* Read the DVD-Video title */ +@@ -1574,7 +1573,6 @@ int DVDMirrorTitleSet(dvd_reader_t * _dvd, char * targetdir,char * title_name, i + title_set_info = DVDGetFileSet(_dvd); -- if ( 32 != read(filehandle, title, 32)) { -- close(filehandle); -- fprintf(stderr, _("Cannot read title from DVD device %s\n"), device); -- return(1); -+#define DVD_SEC_SIZ 2048 -+ { -+ char tempBuf[ DVD_SEC_SIZ ]; -+ -+ if (DVD_SEC_SIZ != read(filehandle, tempBuf, DVD_SEC_SIZ)) { -+ close(filehandle); -+ fprintf(stderr, _("Cannot read title from DVD device %s\n"), device); -+ return(1); -+ } -+ snprintf( title, 32, "%s", tempBuf + 40 ); + if (!title_set_info) { +- DVDClose(_dvd); + return(1); } - /* Terminate the title string */ +-- +1.7.10.3 + -- 1.7.10.3