Commit 930794d4 authored by Alexander Roalter's avatar Alexander Roalter

Fix segfault when reading certain DVDs, for example "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.
parent b8c04e11
......@@ -329,16 +329,17 @@ static int SetUDFCache(dvd_reader_t *device, UDFCacheType type,
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++]; /* character cannot be converted to 8bit, return error */
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 )
......@@ -490,8 +491,9 @@ static int UDFFileIdentifier( uint8_t *data, uint8_t *FileCharacteristics,
L_FI = GETN1(19);
UDFLongAD(&data[20], FileICB);
L_IU = GETN2(36);
if (L_FI) Unicodedecode(&data[38 + L_IU], L_FI, FileName);
else FileName[0] = '\0';
if (L_FI) {
if (!Unicodedecode(&data[38 + L_IU], L_FI, FileName)) FileName[0] = 0;
} else FileName[0] = '\0';
return 4 * ((38 + L_FI + L_IU + 3) / 4);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment