Mercurial > libdvdread4.hg
changeset 83:bed968b9bd99 src
If the start offset points past the last_byte (outside the region read) stop
reading PTTs and adjust nr_of_srpts.
Fixes Transformers 3 and Cars 2.
Patch by John Stebbins ^stebbins*jetheaddev+com/
author | rathann |
---|---|
date | Thu, 03 Oct 2013 21:57:48 +0000 |
parents | aa4a7b151801 |
children | 4cbc44b20dfe |
files | ifo_read.c |
diffstat | 1 files changed, 9 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/ifo_read.c Sun Apr 28 19:10:07 2013 +0000 +++ b/ifo_read.c Thu Oct 03 21:57:48 2013 +0000 @@ -1185,7 +1185,15 @@ goto fail; } for(i = 0; i < vts_ptt_srpt->nr_of_srpts; i++) { - B2N_32(data[i]); + /* Transformers 3 has PTT start bytes that point outside the SRPT PTT */ + uint32_t start = data[i]; + B2N_32(start); + if(start + sizeof(ptt_info_t) > vts_ptt_srpt->last_byte + 1) { + /* don't mess with any bytes beyond the end of the allocation */ + vts_ptt_srpt->nr_of_srpts = i; + break; + } + data[i] = start; /* assert(data[i] + sizeof(ptt_info_t) <= vts_ptt_srpt->last_byte + 1); Magic Knight Rayearth Daybreak is mastered very strange and has Titles with 0 PTTs. They all have a data[i] offsets beyond the end of