Index: libs/libmythtv/dvbsiparser.cpp
===================================================================
--- libs/libmythtv/dvbsiparser.cpp	(revision 9311)
+++ libs/libmythtv/dvbsiparser.cpp	(working copy)
@@ -293,7 +293,8 @@
 
                 int rsz = read(pollArray[i].fd, &buffer, MAX_SECTION_SIZE);
 
-                if (rsz > 0)
+                // minimal valid DVB section is the TDT of size 8
+                if (rsz >= 8)
                 {
                     ParseTable(buffer, rsz,
                                PIDfilterManager[pollArray[i].fd].pid);
@@ -301,6 +302,12 @@
                     continue;
                 }
 
+                if (rsz > 0)
+                {
+                    processed = true;
+                    continue;
+                }
+
                 if (rsz == -1 && errno == EAGAIN)
                 {
                     i--;
Index: libs/libmythtv/siparser.cpp
===================================================================
--- libs/libmythtv/siparser.cpp	(revision 9311)
+++ libs/libmythtv/siparser.cpp	(working copy)
@@ -521,11 +521,17 @@
  *   COMMON PARSER CODE
  *------------------------------------------------------------------------*/
 
-void SIParser::ParseTable(uint8_t *buffer, int /*size*/, uint16_t pid)
+void SIParser::ParseTable(uint8_t *buffer, int size, uint16_t pid)
 {
     QMutexLocker locker(&pmap_lock);
 
     const PESPacket pes = PESPacket::ViewData(buffer);
+    if (size != pes.Length()+3)
+    {
+        VERBOSE(VB_SIPARSER, LOC + "size of buffer and section_length do not"
+                " match. Probably a broken section.");
+        return; 
+    }
     const PSIPTable psip(pes);
 
     if (!psip.SectionSyntaxIndicator())
