[DVDnav-discuss] Libdvdread misses hidden files and causes segfaults to calling programs

Reimar Döffinger Reimar.Doeffinger at gmx.de
Tue Sep 20 00:27:38 CEST 2011


On Mon, Sep 19, 2011 at 03:22:55PM -0700, John Stebbins wrote:
> On 09/18/2011 11:12 AM, doug Springer wrote:
> > 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.
> > 
> 
> This patch has been submitted twice already, but I like my version better.  The other 2 unnecessarily truncate the
> string when something is found in the high byte.  This fills that string the same as pre-patch, but returns a code
> indicating that junk was found in the MSB.

I that case I don't see the point in making things hard to review
by rewriting the whole function.
Why not just
Index: dvd_udf.c
===================================================================
--- dvd_udf.c   (revision 1233)
+++ dvd_udf.c   (working copy)
@@ -329,16 +329,17 @@
 static int Unicodedecode( uint8_t *data, int len, char *target )
 {
   int p = 1, i = 0;
+  int err = 0;
 
   if( ( data[ 0 ] == 8 ) || ( data[ 0 ] == 16 ) ) do {
-    if( data[ 0 ] == 16 ) p++;  /* Ignore MSB of unicode16 */
+    if( data[ 0 ] == 16 ) err |= data[ p++ ];  /* Ignore MSB of unicode16 */
     if( p < len ) {
       target[ i++ ] = data[ p++ ];
     }
   } while( p < len );
 
   target[ i ] = '\0';
-  return 0;
+  return !err;
 }
 
 static int UDFDescriptor( uint8_t *data, uint16_t *TagID )



More information about the DVDnav-discuss mailing list