82 lines
2.8 KiB
Diff
82 lines
2.8 KiB
Diff
Index: /trunk/gdal/ogr/ogrsf_frmts/mitab/mitab_middatafile.cpp
|
|
===================================================================
|
|
--- /trunk/gdal/ogr/ogrsf_frmts/mitab/mitab_middatafile.cpp (revision 20796)
|
|
+++ /trunk/gdal/ogr/ogrsf_frmts/mitab/mitab_middatafile.cpp (revision 20818)
|
|
@@ -212,4 +212,8 @@
|
|
else
|
|
{
|
|
+ // skip leading spaces
|
|
+ while(pszLine && (*pszLine == ' ' || *pszLine == '\t') )
|
|
+ pszLine++;
|
|
+
|
|
strncpy(m_szLastRead,pszLine,MIDMAXCHAR);
|
|
}
|
|
Index: /trunk/gdal/ogr/ogrsf_frmts/mitab/mitab_miffile.cpp
|
|
===================================================================
|
|
--- /trunk/gdal/ogr/ogrsf_frmts/mitab/mitab_miffile.cpp (revision 20797)
|
|
+++ /trunk/gdal/ogr/ogrsf_frmts/mitab/mitab_miffile.cpp (revision 20818)
|
|
@@ -471,5 +471,5 @@
|
|
int MIFFile::ParseMIFHeader()
|
|
{
|
|
- GBool bColumns = FALSE, bDataFound = FALSE;
|
|
+ GBool bColumns = FALSE, bAllColumnsRead = FALSE;
|
|
int nColumns = 0;
|
|
GBool bCoordSys = FALSE;
|
|
@@ -498,15 +498,7 @@
|
|
* Parse header until we find the "Data" line
|
|
*----------------------------------------------------------------*/
|
|
- while (((pszLine = m_poMIFFile->GetLine()) != NULL))
|
|
- {
|
|
- while(pszLine && (*pszLine == ' ' || *pszLine == '\t') )
|
|
- pszLine++; // skip leading spaces
|
|
-
|
|
- if( EQUALN(pszLine,"Data",4) && !bColumns )
|
|
- {
|
|
- bDataFound = TRUE;
|
|
- break;
|
|
- }
|
|
-
|
|
+ while (((pszLine = m_poMIFFile->GetLine()) != NULL) &&
|
|
+ ((bAllColumnsRead == FALSE) || !EQUALN(pszLine,"Data",4)))
|
|
+ {
|
|
if (bColumns == TRUE && nColumns >0)
|
|
{
|
|
@@ -514,6 +506,9 @@
|
|
{
|
|
nColumns--;
|
|
- if (nColumns == 0)
|
|
+ if (nColumns == 0)
|
|
+ {
|
|
+ bAllColumnsRead = TRUE;
|
|
bColumns = FALSE;
|
|
+ }
|
|
}
|
|
else
|
|
@@ -618,4 +613,10 @@
|
|
nColumns = atoi(papszToken[1]);
|
|
m_nAttribut = nColumns;
|
|
+ if (nColumns == 0)
|
|
+ {
|
|
+ // Permit to 0 columns
|
|
+ bAllColumnsRead = TRUE;
|
|
+ bColumns = FALSE;
|
|
+ }
|
|
}
|
|
else
|
|
@@ -638,5 +639,14 @@
|
|
}
|
|
|
|
- if ( !bDataFound )
|
|
+ if (!bAllColumnsRead)
|
|
+ {
|
|
+ CPLError(CE_Failure, CPLE_NotSupported,
|
|
+ "COLUMNS keyword not found or invalid number of columns read in %s. File may be corrupt.",
|
|
+ m_pszFname);
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ if ((pszLine = m_poMIFFile->GetLastLine()) == NULL ||
|
|
+ EQUALN(m_poMIFFile->GetLastLine(),"DATA",4) == FALSE)
|
|
{
|
|
CPLError(CE_Failure, CPLE_NotSupported,
|