From 33c0ab1aaddba2ff7cc0d697ecf5df32d329de7b Mon Sep 17 00:00:00 2001
From: Oliver Bock <oliver.bock@aei.mpg.de>
Date: Fri, 1 Aug 2008 20:42:32 +0200
Subject: [PATCH] Added stream exception handling

---
 src/starsphere/EinsteinRadioAdapter.cpp | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/starsphere/EinsteinRadioAdapter.cpp b/src/starsphere/EinsteinRadioAdapter.cpp
index 1df0a15..d82796e 100644
--- a/src/starsphere/EinsteinRadioAdapter.cpp
+++ b/src/starsphere/EinsteinRadioAdapter.cpp
@@ -83,29 +83,31 @@ void EinsteinRadioAdapter::parseApplicationInformation()
 			m_WUSkyPosRightAscension *= 180/PI;
 			m_WUSkyPosDeclination *= 180/PI;
 
-			// prepare power spectrum data
+			// deserialize power spectrum data
 			string spectrumString(spectrumArray);
 			if(spectrumString.length() == POWERSPECTRUM_BIN_BYTES) {
 				int spectrumBinValue;
+				// prepare hex to int conversion stream
 				istringstream spectrumBinStream;
+				spectrumBinStream.exceptions(ios_base::badbit | ios_base::failbit);
 				// iterate over all bins
 				for(int i = 0, j = 0; i < POWERSPECTRUM_BIN_BYTES; i += 2, ++j) {
-					spectrumBinStream.str(spectrumString.substr(i, 2));
-					if(spectrumBinStream) {
+					try {
+						spectrumBinStream.str(spectrumString.substr(i, 2));
 						// convert hex bin value to integer
 						spectrumBinStream >> hex >> spectrumBinValue;
 						// store bin power value
 						m_WUTemplatePowerSpectrum.at(j) = (char) spectrumBinValue;
 						spectrumBinStream.clear();
 					}
-					else {
-						cerr << "Premature end of spectrum stream encountered!" << endl;
+					catch(ios_base::failure) {
+						cerr << "Error processing power spectrum shared memory data!" << endl;
 						break;
 					}
 				}
 			}
 			else {
-				cerr << "Invalid power spectrum data encountered!" << endl;
+				cerr << "Invalid power spectrum shared memory data encountered!" << endl;
 			}
 		}
 	}
-- 
GitLab