Index: trunk/BNC/GPSS/gpssDecoder.cpp
===================================================================
--- trunk/BNC/GPSS/gpssDecoder.cpp	(revision 1426)
+++ trunk/BNC/GPSS/gpssDecoder.cpp	(revision 1427)
@@ -57,15 +57,22 @@
   errmsg.clear();
 
+  if (_mode == MODE_SEARCH) {
+    _buffer.clear();
+  }
   _buffer.append(data, dataLen);
 
   for (;;) { 
 
+    if (_buffer.size() < 1) {
+      _mode = MODE_SEARCH;
+      return success;
+    }
+
     if      (_mode == MODE_SEARCH) {
-      if (_buffer.size() < 1) {
-        _mode = MODE_SEARCH;
-        return success;
-      }
       if (_buffer[0] == 0x02) {
         _mode = MODE_TYPE;
+      }
+      else {
+        _mode = MODE_SEARCH;
       }
       _buffer.erase(0,1);
@@ -73,8 +80,4 @@
 
     else if (_mode == MODE_TYPE) {
-      if (_buffer.size() < 1) {
-        _mode = MODE_SEARCH;
-        return success;
-      }
       if        (_buffer[0] == 0x00) {
         _mode = MODE_EPOCH;
@@ -82,5 +85,4 @@
         _mode = MODE_EPH;
       } else {
-        errmsg.push_back("Unknown record type");
         _mode = MODE_SEARCH;
       }
@@ -112,9 +114,9 @@
       memcpy(&epochHdr, _buffer.data(), sizeof(epochHdr));
       _buffer.erase(0,sizeof(epochHdr));
+      if (_buffer.size() < epochHdr.n_svs * sizeof(t_obsInternal)) {
+        _mode = MODE_SEARCH;
+        return success;
+      }
       for (int is = 1; is <= epochHdr.n_svs; is++) {
-        if (_buffer.size() < sizeof(t_obsInternal)) {
-          _mode = MODE_SEARCH;
-          return success;
-	}
         t_obs* obs = new t_obs();
         memcpy(&(obs->_o), _buffer.data(), sizeof(t_obsInternal));
@@ -138,8 +140,4 @@
 
     else {
-      if (_buffer.size() < 1) {
-        _mode = MODE_SEARCH;
-        return success;
-      }
       _buffer.erase(0,1);
       _mode = MODE_SEARCH;
