Your message dated Fri, 29 Jun 2012 22:23:07 +0000
with message-id <[email protected]>
and subject line Bug#663512: fixed in libdvdread 4.2.0+20120521-2
has caused the Debian Bug report #663512,
regarding libdvdread4: fails on discs storing their file system descriptor at
the end
to be marked as done.
This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.
(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)
--
663512: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=663512
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: libdvdread4
Version: 4.2.0-1
Hello,
libdvdread is very likely to fail on discs/images that store their File
System Descriptor at the end of the disc/image rather than at the
beginning. This is due to the "strategy" libdvdread uses to find it:
libdvdread scans sequentially from the beginning of the disc/image for
the File System Descriptor and identifies it by a single byte tag.
Aside from wasting lots of time on discs/images that store their File
System Descriptor at the end there is quite a good chance to stumble
across a random data block that accidentally starts with this tag (and
failing on it) before finding the real File System Descriptor.
As far as I can see, at least CDBurnerXP seems to (be able to) create
such images - at least if my interpretation of the Implementation
Identifier "NMS DVDProLib" is correct.
The attached ... well, let's call it ugly hack fixes this by obtaining
the File System Descriptor location from the Logical Volume Descriptor.
This is most likely something to forward upstream. Since I don't really
know what's a valid upstream currently (lots of projects seem to manage
their own local copies of libdvdread), I hope it's okay if I leave this
up to you.
Thanks for your work & best regards
Mario
--
I have great faith in fools; self-confidence my friends call it.
-- Edgar Allan Poe
diff -urN libdvdread-4.2.0.orig/src/dvd_udf.c libdvdread-4.2.0/src/dvd_udf.c
--- libdvdread-4.2.0.orig/src/dvd_udf.c 2011-10-06 14:10:01.000000000 +0200
+++ libdvdread-4.2.0/src/dvd_udf.c 2012-03-11 20:25:20.468768445 +0100
@@ -80,6 +80,8 @@
uint32_t AccessType;
uint32_t Start;
uint32_t Length;
+ uint32_t FSD_Location;
+ uint32_t FSD_Length;
};
struct AD {
@@ -99,6 +101,12 @@
struct extent_ad rvds;
};
+struct fsd_t {
+ uint16_t Partition;
+ uint32_t Location;
+ uint32_t Length;
+};
+
struct pvd_t {
uint8_t VolumeIdentifier[32];
uint8_t VolumeSetIdentifier[128];
@@ -423,6 +431,16 @@
return 0;
}
+/**
+ * Reads the File Set Descriptor from the Logical Volume Descriptor.
+ */
+static void UDFFSD( uint8_t *data, struct fsd_t *fsd )
+{
+ fsd->Length = GETN4(248); /* always 2048? */
+ fsd->Location = GETN4(252);
+ fsd->Partition = GETN2(256); /* always 0? */
+}
+
static int UDFFileEntry( uint8_t *data, uint8_t *FileType,
struct Partition *partition, struct AD *ad )
{
@@ -765,8 +783,18 @@
/* Logical Volume Descriptor */
if( UDFLogVolume( LogBlock, part->VolumeDesc ) ) {
/* TODO: sector size wrong! */
- } else
- volvalid = 1;
+ } else {
+ struct fsd_t fsd;
+
+ UDFFSD(LogBlock, &fsd);
+ if(part->Number == fsd.Partition) {
+ part->FSD_Location = fsd.Location;
+ part->FSD_Length = fsd.Length;
+ volvalid = 1;
+ } else {
+ /* TODO: Oups, how to handle this? */
+ }
+ }
}
} while( ( lbnum <= MVDS_location + ( MVDS_length - 1 )
@@ -809,7 +837,10 @@
SetUDFCache(device, PartitionCache, 0, &partition);
/* Find root dir ICB */
- lbnum = partition.Start;
+ lbnum = partition.Start + partition.FSD_Location;
+ /*
+ fprintf(stderr, "Looking for FSD at 0x%x\n", lbnum);
+ */
do {
if( DVDReadLBUDF( device, lbnum++, 1, LogBlock, 0 ) <= 0 )
TagID = 0;
signature.asc
Description: Digital signature
--- End Message ---
--- Begin Message ---
Source: libdvdread
Source-Version: 4.2.0+20120521-2
We believe that the bug you reported is fixed in the latest version of
libdvdread, which is due to be installed in the Debian FTP archive:
libdvdread-dbg_4.2.0+20120521-2_i386.deb
to main/libd/libdvdread/libdvdread-dbg_4.2.0+20120521-2_i386.deb
libdvdread-dev_4.2.0+20120521-2_i386.deb
to main/libd/libdvdread/libdvdread-dev_4.2.0+20120521-2_i386.deb
libdvdread4_4.2.0+20120521-2_i386.deb
to main/libd/libdvdread/libdvdread4_4.2.0+20120521-2_i386.deb
libdvdread_4.2.0+20120521-2.debian.tar.xz
to main/libd/libdvdread/libdvdread_4.2.0+20120521-2.debian.tar.xz
libdvdread_4.2.0+20120521-2.dsc
to main/libd/libdvdread/libdvdread_4.2.0+20120521-2.dsc
libdvdread_4.2.0+20120521.orig.tar.xz
to main/libd/libdvdread/libdvdread_4.2.0+20120521.orig.tar.xz
A summary of the changes between this version and the previous one is
attached.
Thank you for reporting the bug, which will now be closed. If you
have further comments please address them to [email protected],
and the maintainer will reopen the bug report if appropriate.
Debian distribution maintenance software
pp.
Daniel Baumann <[email protected]> (supplier of updated
libdvdread package)
(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing [email protected])
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Format: 1.8
Date: Fri, 29 Jun 2012 23:01:44 +0200
Source: libdvdread
Binary: libdvdread4 libdvdread-dbg libdvdread-dev
Architecture: source i386
Version: 4.2.0+20120521-2
Distribution: unstable
Urgency: low
Maintainer: Daniel Baumann <[email protected]>
Changed-By: Daniel Baumann <[email protected]>
Description:
libdvdread-dbg - library for reading DVDs (debug)
libdvdread-dev - library for reading DVDs (development)
libdvdread4 - library for reading DVDs
Closes: 281186 281575 316926 541723 649790 651926 653516 663512 677493
Changes:
libdvdread (4.2.0+20120521-2) unstable; urgency=low
.
* Correcting some editorial mistakes in copyright file.
* Updating GPL boilerplate in copyright file.
* Switching to xz compression.
* Correcting hurd.patch, thanks to Jan Schmidt
<[email protected]> (Closes: #651926, #653516, #677493).
* Adding patch from Mario Holbe <[email protected]> to work
with file system descriptors located at the end of the disk rather
than at the beginning (Closes: #663512).
* Adding patch from Bryce Harrington <[email protected]> to stifle the
'Please send bug report - no VTS_TMAPT ??' message (Closes: #281186,
#281575, #316926, #541723).
* Adding patch from Doug Springer <[email protected]> to fix
read/write beyond end of an array due to using a length value taken
from the DVD, which can exceed the allocated size, causing a
segmentation fault (Closes: #649790).
Checksums-Sha1:
38c88741a1715a2c2fdca758494817a0ddc55fc8 1292 libdvdread_4.2.0+20120521-2.dsc
556b13b01032edfd1eee5a9474ec28eb1a4ba893 299756
libdvdread_4.2.0+20120521.orig.tar.xz
07ec5bd337fdbbee5b496fd714baff7de27e800f 11768
libdvdread_4.2.0+20120521-2.debian.tar.xz
2afd1be7bae96ff8e847c048cf02171b55ca16a0 55458
libdvdread4_4.2.0+20120521-2_i386.deb
28246782956b7b3c77a8d4e920f9c3cbcfa30cba 127060
libdvdread-dbg_4.2.0+20120521-2_i386.deb
2d9b412723c7655a8c3572b21a08205ebaf69715 71750
libdvdread-dev_4.2.0+20120521-2_i386.deb
Checksums-Sha256:
38afc66c59c81b83c8c34d160de4d05728f839e5dda6aa8ac739d2d91b612b9c 1292
libdvdread_4.2.0+20120521-2.dsc
a995218a98cf40529a04e3f7da78e1aa4c56f9442100b9ce08619f4b1abdab50 299756
libdvdread_4.2.0+20120521.orig.tar.xz
0089869250b7bd76d617bd2360fe7f20f0b3afe0e10e5c29824e4c3df4c067f3 11768
libdvdread_4.2.0+20120521-2.debian.tar.xz
c5d97e83b10d04ac2e674f5c8bac7a1fcf134322941173927483731fbd2c2a44 55458
libdvdread4_4.2.0+20120521-2_i386.deb
e7cbf90431ad69c970c95e6fe4fb8d46668df2c0954a769a4d440c17bd7d7acb 127060
libdvdread-dbg_4.2.0+20120521-2_i386.deb
06cbe8241d473694f4fa7d22bf1409c9ea8e1b7a8af57fa67d805685c7031872 71750
libdvdread-dev_4.2.0+20120521-2_i386.deb
Files:
f2464595d45e14be007314417f96f435 1292 graphics optional
libdvdread_4.2.0+20120521-2.dsc
efeeb5eaecde9c0fe85004e0d9c0d41b 299756 graphics optional
libdvdread_4.2.0+20120521.orig.tar.xz
8ca904cc97f2626d1c89682b10b8e34d 11768 graphics optional
libdvdread_4.2.0+20120521-2.debian.tar.xz
e51e5c98d3d75249f1a9c340db60f75a 55458 libs optional
libdvdread4_4.2.0+20120521-2_i386.deb
b153a4f4240dfb3a23063b6548e1f89f 127060 debug extra
libdvdread-dbg_4.2.0+20120521-2_i386.deb
4bc2f8842aa1b482d1235a536af7a575 71750 libdevel optional
libdvdread-dev_4.2.0+20120521-2_i386.deb
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
iEYEARECAAYFAk/uGXQACgkQ+C5cwEsrK544nwCgoVBG91eHfh0cZb4fMVVje26N
XhYAoNGUIFNqqfdCCP8VMqgXQQ5tUV7W
=fdt6
-----END PGP SIGNATURE-----
--- End Message ---