Skip to content

Commit

Permalink
libdvdread: backport upstream changesets r1232 and r1234.
Browse files Browse the repository at this point in the history
This fixes playback of some discs that have been recently reported as failing.
  • Loading branch information
tralph committed Nov 7, 2011
1 parent 8b2c972 commit b1ff37e
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 4 deletions.
10 changes: 6 additions & 4 deletions mythtv/libs/libmythdvdnav/dvdread/dvd_udf.c
Expand Up @@ -333,16 +333,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 )
Expand Down Expand Up @@ -494,8 +495,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);
}

Expand Down
4 changes: 4 additions & 0 deletions mythtv/libs/libmythdvdnav/dvdread/ifo_read.c
Expand Up @@ -1191,6 +1191,10 @@ int ifoRead_VTS_PTT_SRPT(ifo_handle_t *ifofile) {
return 0;
}

if(vts_ptt_srpt->nr_of_srpts > info_length / sizeof(*data)) {
fprintf(stderr, "libdvdread: PTT search table too small.\n");
goto fail;
}
for(i = 0; i < vts_ptt_srpt->nr_of_srpts; i++) {
B2N_32(data[i]);
/* assert(data[i] + sizeof(ptt_info_t) <= vts_ptt_srpt->last_byte + 1);
Expand Down

0 comments on commit b1ff37e

Please sign in to comment.