Ticket #1456: pespacket-underflow-fix2.patch

File pespacket-underflow-fix2.patch, 1.3 KB (added by Janne <janne-mythtv@…>, 15 years ago)
  • libs/libmythtv/mpeg/pespacket.h

     
    5959          _pesdataSize(0), _allocSize(0)
    6060    {
    6161        _badPacket = !VerifyCRC();
    62         _pesdataSize = max(Length()-1 + (HasCRC() ? 4 : 0), (uint)0);
     62        _pesdataSize = Length() + (HasCRC() ? 4 : 0);
     63        if (_pesdataSize > 0)
     64            _pesdataSize -= 1;
    6365    }
    6466
    6567  private:
     
    211213
    212214    uint CRC() const
    213215    {
    214         uint offset = Length() - 1;
     216        uint offset = Length();
     217        if (offset > 0) offset -= 1;
    215218        return ((_pesdata[offset+0]<<24) |
    216219                (_pesdata[offset+1]<<16) |
    217220                (_pesdata[offset+2]<<8) |
     
    219222    }
    220223
    221224    uint CalcCRC() const
    222         { return mpegts_crc32(_pesdata, Length()-1); }
     225    {
     226        uint offset = Length();
     227        if (offset > 0) offset -= 1;
     228        return mpegts_crc32(_pesdata, offset); }
    223229
    224230    void SetCRC(uint crc)
    225231    {
    226         uint offset = Length() - 1;
     232        uint offset = Length();
     233        if (offset > 0) offset -= 1;
    227234        _pesdata[offset+0] = (crc & 0xff000000) >> 24;
    228235        _pesdata[offset+1] = (crc & 0x00ff0000) >> 16;
    229236        _pesdata[offset+2] = (crc & 0x0000ff00) >> 8;