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になるように設定される。
 	   値が発生した場合は、エラーなので対象外にする */
