diff -Nur epgdumpr2_orig/ts.c epgdumpr2/ts.c --- epgdumpr2_orig/ts.c 2009-03-15 21:35:57.000000000 +0900 +++ epgdumpr2/ts.c 2009-07-19 18:38:17.000000000 +0900 @@ -202,6 +202,11 @@ pk.payloadlen -= 1; } memset(pk.payload, 0xFF, sizeof(pk.payload)); +#if 1 /* 07/07/2009 add: */ + if( pk.payloadlen > sizeof(pk.payload) ){ + continue; + } +#endif memcpy(pk.payload, payptr, pk.payloadlen); /* @@ -307,6 +312,14 @@ int checkcrc(SECcache *secs) { +#if 1 /* 07/07/2009 add: 異常状態回避のため */ + /* セクション最大長を超えることなどあり得ないはずだが... */ + if( secs->seclen > MAXSECLEN ){ + /* よく分からんので破棄してやる */ + return 0; + } +#endif + /* セクションの終りに置かれる4バイトのCRC32は、 CRC計算の結果0になるように設定される。 値が発生した場合は、エラーなので対象外にする */