Ticket #1482: sectionreader_validation.patch

File sectionreader_validation.patch, 1.7 KB (added by Janne <janne-mythtv@…>, 14 years ago)
  • libs/libmythtv/dvbsiparser.cpp

     
    293293
    294294                int rsz = read(pollArray[i].fd, &buffer, MAX_SECTION_SIZE);
    295295
    296                 if (rsz > 0)
     296                // minimal valid DVB section is the TDT of size 8
     297                if (rsz >= 8)
    297298                {
    298299                    ParseTable(buffer, rsz,
    299300                               PIDfilterManager[pollArray[i].fd].pid);
     
    301302                    continue;
    302303                }
    303304
     305                if (rsz > 0)
     306                {
     307                    processed = true;
     308                    continue;
     309                }
     310
    304311                if (rsz == -1 && errno == EAGAIN)
    305312                {
    306313                    i--;
  • libs/libmythtv/siparser.cpp

     
    521521 *   COMMON PARSER CODE
    522522 *------------------------------------------------------------------------*/
    523523
    524 void SIParser::ParseTable(uint8_t *buffer, int /*size*/, uint16_t pid)
     524void SIParser::ParseTable(uint8_t *buffer, int size, uint16_t pid)
    525525{
    526526    QMutexLocker locker(&pmap_lock);
    527527
    528528    const PESPacket pes = PESPacket::ViewData(buffer);
     529    if (size != pes.Length()+3)
     530    {
     531        VERBOSE(VB_SIPARSER, LOC + "size of buffer and section_length do not"
     532                " match. Probably a broken section.");
     533        return;
     534    }
    529535    const PSIPTable psip(pes);
    530536
    531537    if (!psip.SectionSyntaxIndicator())