Index: ext/libicpf/src/libicpf/file.h
===================================================================
diff -u -N -rcc897193e71c0650a9226ce4c2fbb4430b1460d6 -ref6c75aa057c06ecd065137ee9e459c431806e8a
--- ext/libicpf/src/libicpf/file.h	(.../file.h)	(revision cc897193e71c0650a9226ce4c2fbb4430b1460d6)
+++ ext/libicpf/src/libicpf/file.h	(.../file.h)	(revision ef6c75aa057c06ecd065137ee9e459c431806e8a)
@@ -287,10 +287,23 @@
 	rFile >> stCount;
 	if(stCount)
 	{
-		PTSTR pszBuffer = str.GetBufferSetLength((int)(stCount + 1));
-		rFile.sread((ptr_t)pszBuffer, (uint_t)stCount * sizeof(tchar_t));
-		pszBuffer[stCount] = _T('\0');
-		str.ReleaseBuffer();
+		try
+		{
+			PTSTR pszBuffer = str.GetBufferSetLength((int)(stCount + 1));
+			rFile.sread((ptr_t)pszBuffer, (uint_t)stCount * sizeof(tchar_t));
+			pszBuffer[stCount] = _T('\0');
+			str.ReleaseBuffer();
+		}
+		catch(CMemoryException* e)
+		{
+			e->Delete();
+			THROW(_T("Memory exception intercepted"), 0, ERROR_READ_FAULT, 0);
+		}
+		catch(COleException* e)
+		{
+			e->Delete();
+			THROW(_T("Ole exception intercepted"), 0, ERROR_READ_FAULT, 0);
+		}
 	}
 	return rFile;
 }