Ticket #1790: pes_assembly_robustness.diff
File pes_assembly_robustness.diff, 1.5 KB (added by , 18 years ago) |
---|
-
libs/libmythtv/mpeg/mpegstreamdata.cpp
old new PSIPTable* MPEGStreamData::AssemblePSIP( 196 196 PESPacket* partial = GetPartialPES(tspacket->PID()); 197 197 if (partial && partial->AddTSPacket(tspacket)) 198 198 { 199 // discard broken packets 200 if (!partial->IsGood()) 201 { 202 VERBOSE(VB_IMPORTANT, "Discard broken pes packet!"); 203 ClearPartialPES(tspacket->PID()); 204 return NULL; 205 } 206 199 207 PSIPTable* psip = new PSIPTable(*partial); 200 208 201 209 // Advance to the next packet 202 210 // pesdata starts only at PSIOffset()+1 203 211 uint packetStart = partial->PSIOffset() + 1 + psip->SectionLength(); 204 if (packetStart < partial->TSSizeInBuffer()) 212 if (packetStart < partial->TSSizeInBuffer() && 213 packetStart+TSPacket::SIZE > partial->TSSizeInBuffer()) 205 214 { 206 215 if (partial->pesdata()[psip->SectionLength()] != 0xff) 207 216 { … … PSIPTable* MPEGStreamData::AssemblePSIP( 223 232 return psip; 224 233 } 225 234 } 235 else 236 { 237 VERBOSE(VB_IMPORTANT, "Discard suspicious pes packet!"); 238 ClearPartialPES(tspacket->PID()); 239 return NULL; 240 } 226 241 227 242 moreTablePackets = false; 228 243 DeletePartialPES(tspacket->PID());