OSDN Git Service

Fix crash when comparing zero size file with prediffer plugin
authorsdottaka <none@none>
Sat, 4 May 2013 04:40:42 +0000 (13:40 +0900)
committersdottaka <none@none>
Sat, 4 May 2013 04:40:42 +0000 (13:40 +0900)
Src/Common/multiformatText.cpp

index e8ca78c..4f3b049 100644 (file)
@@ -240,9 +240,19 @@ const TCHAR *storageForPlugins::GetDataFileUnicode()
                {
                        // Init filedata struct and open file as memory mapped (in file)
                        TFile fileIn(m_filename);
-                       pshmIn.reset(new SharedMemory(fileIn, SharedMemory::AM_READ));
-                       pchar = pshmIn->begin() + m_nBomSize;
-                       nchars = pshmIn->end() - pchar;
+                       try
+                       {
+                               pshmIn.reset(new SharedMemory(fileIn, SharedMemory::AM_READ));
+                               pchar = pshmIn->begin() + m_nBomSize;
+                               nchars = pshmIn->end() - pchar;
+                       }
+                       catch (...)\r
+                       {\r
+                               if (!fileIn.isDevice() && fileIn.getSize() > 0)\r
+                                       return NULL;\r
+                               pchar = "";\r
+                               nchars = 0;\r
+                       }                       
                }
                else
                {
@@ -314,10 +324,20 @@ BSTR * storageForPlugins::GetDataBufferUnicode()
                {
                        // Init filedata struct and open file as memory mapped (in file)
                        TFile fileIn(m_filename);
-                       pshmIn.reset(new SharedMemory(fileIn, SharedMemory::AM_READ));
+                       try
+                       {
+                               pshmIn.reset(new SharedMemory(fileIn, SharedMemory::AM_READ));
 
-                       pchar = pshmIn->begin() + m_nBomSize;
-                       nchars = pshmIn->end() - pchar;
+                               pchar = pshmIn->begin() + m_nBomSize;
+                               nchars = pshmIn->end() - pchar;
+                       }
+                       catch (...)\r
+                       {\r
+                               if (!fileIn.isDevice() && fileIn.getSize() > 0)\r
+                                       return NULL;\r
+                               pchar = "";\r
+                               nchars = 0;\r
+                       }                       
                }
                else
                {
@@ -377,10 +397,20 @@ const TCHAR *storageForPlugins::GetDataFileAnsi()
                {
                        // Init filedata struct and open file as memory mapped (in file)
                        TFile fileIn(m_filename);
-                       pshmIn.reset(new SharedMemory(fileIn, SharedMemory::AM_READ));
+                       try
+                       {
+                               pshmIn.reset(new SharedMemory(fileIn, SharedMemory::AM_READ));
 
-                       pchar = pshmIn->begin()+m_nBomSize; // pass the BOM
-                       nchars = pshmIn->end()-pchar;
+                               pchar = pshmIn->begin()+m_nBomSize; // pass the BOM
+                               nchars = pshmIn->end()-pchar;
+                       }
+                       catch (...)\r
+                       {\r
+                               if (!fileIn.isDevice() && fileIn.getSize() > 0)\r
+                                       return NULL;\r
+                               pchar = "";\r
+                               nchars = 0;\r
+                       }
                }
                else 
                {