Package: libdvdread4
Version: 4.1.4-1219-2 and others

No error message, but symptoms are usually segfault when reading, for example 
the Movie DVD Thor.
This results from a new anti-copy scheme where the real video_ts.ifo is hidden. 
Use of the decoy video_ts.ifo results in a unplayable DVD.

Discussion is here:
http://ubuntuforums.org/showthread.php?p=11257764

Patch is here:

diff -ru libdvdread-4.1.3/src/dvd_udf.c libdvdread-4.1.3.fixed/src/dvd_udf.c
--- libdvdread-4.1.3/src/dvd_udf.c      2008-09-06 15:55:51.000000000 -0600
+++ libdvdread-4.1.3.fixed/src/dvd_udf.c        2011-09-16 14:07:04.000000000 
-0600
@@ -331,21 +331,26 @@
 /* This is wrong with regard to endianess */
 #define GETN(p, n, target) memcpy(target,&data[p], n)

-static int Unicodedecode( uint8_t *data, int len, char *target )
+static int Unicodedecode(uint8_t *data, int len, char *target)
 {
-    int p = 1, i = 0;
+    len--;
+    data++;
+    if (data[-1] == 8 )
+        memcpy(target, data, len);
+    else if (data[-1] == 16) {
+        int i;

-    if( ( data[ 0 ] == 8 ) || ( data[ 0 ] == 16 ) ) do {
-        if( data[ 0 ] == 16 ) p++;  /* Ignore MSB of unicode16 */
-        if( p<  len ) {
-            target[ i++ ] = data[ p++ ];
+        for (i = 0; i<  len; i++) {
+            if (data[i*2] == 0)
+                target[i] = data[i*2+1];
+            else
+                target[i] = 0;
         }
-    } while( p<  len );
+    }
+    target[len] = '\0';

-    target[ i ] = '\0';
     return 0;
 }
-
 static int UDFDescriptor( uint8_t *data, uint16_t *TagID )
 {
     *TagID = GETN2(0);






--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]

Reply via email to