Skip to content

Commit 2d99590

Browse files
author
homann
committed
Fix for bug #538 Malformed line crashed delimited text provider.
git-svn-id: http://svn.osgeo.org/qgis/branches/Release-0_8_0@6511 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 6f00cfb commit 2d99590

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

src/providers/delimitedtext/qgsdelimitedtextprovider.cpp

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
#include "qgsrect.h"
4040
#include "qgis.h"
4141
#include "qgsmessageviewer.h"
42+
#include "qgslogger.h"
4243

4344
#ifdef WIN32
4445
#define QGISEXTERN extern "C" __declspec( dllexport )
@@ -178,6 +179,12 @@ QgsDelimitedTextProvider::QgsDelimitedTextProvider(QString const &uri)
178179
// split the line on the delimiter
179180
QStringList parts =
180181
QStringList::split(mDelimiter, line, true);
182+
183+
// Skip malformed lines silently. Report line number with getNextFeature()
184+
if ( (parts.size() <= fieldPositions[mXField]) || (parts.size() <= fieldPositions[mYField]) )
185+
{
186+
continue;
187+
}
181188
//if(parts.size() == attributeFields.size())
182189
//{
183190
// // we can populate attributes if required
@@ -356,24 +363,32 @@ QgsDelimitedTextProvider::getNextFeature_( QgsFeature & feature,
356363
feature.setValid( false );
357364
while ( ! mStream->atEnd() )
358365
{
366+
double x = 0.0;
367+
double y = 0.0;
359368
QString line = mStream->readLine(); // Default local 8 bit encoding
360369
// lex the tokens from the current data line
361370
QStringList tokens = QStringList::split(mDelimiter, line, true);
362371

363372
bool xOk = false;
364373
bool yOk = false;
365374

366-
int xFieldPos = fieldPositions[mXField];
367-
int yFieldPos = fieldPositions[mYField];
375+
// Skip indexing malformed lines.
376+
if ( ! ((tokens.size() <= fieldPositions[mXField]) || (tokens.size() <= fieldPositions[mXField])) )
377+
{
378+
379+
int xFieldPos = fieldPositions[mXField];
380+
int yFieldPos = fieldPositions[mYField];
368381

369-
double x = tokens[xFieldPos].toDouble( &xOk );
370-
double y = tokens[yFieldPos].toDouble( &yOk );
382+
x = tokens[xFieldPos].toDouble( &xOk );
383+
y = tokens[yFieldPos].toDouble( &yOk );
371384

385+
}
372386
if (! (xOk && yOk))
373387
{
374388
// Accumulate any lines that weren't ok, to report on them
375389
// later, and look at the next line in the file, but only if
376390
// we need to.
391+
QgsDebugMsg("Malformed line : " + line);
377392
if (mShowInvalidLines)
378393
mInvalidLines << line;
379394

0 commit comments

Comments
 (0)