Skip to content

Commit fcf6203

Browse files
committedMay 28, 2020
QgsDelimitedTextSourceSelect: add a limitation to the number of fields
Set to 10000 by default. Can be overriden through settings. This is only for the preview in the source select dialog. (Attribute table performs badly for much less columns) Related to #36392
1 parent 644a564 commit fcf6203

File tree

2 files changed

+4
-0
lines changed

2 files changed

+4
-0
lines changed
 

‎src/providers/delimitedtext/qgsdelimitedtextsourceselect.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ QgsDelimitedTextSourceSelect::QgsDelimitedTextSourceSelect( QWidget *parent, Qt:
9898
mFileWidget->setDialogTitle( tr( "Choose a Delimited Text File to Open" ) );
9999
mFileWidget->setFilter( tr( "Text files" ) + QStringLiteral( " (*.txt *.csv *.dat *.wkt);;" ) + tr( "All files" ) + QStringLiteral( " (* *.*)" ) );
100100
mFileWidget->setSelectedFilter( settings.value( mSettingsKey + QStringLiteral( "/file_filter" ), QString() ).toString() );
101+
mMaxFields = settings.value( mSettingsKey + QStringLiteral( "/max_fields" ), DEFAULT_MAX_FIELDS ).toInt();
101102
connect( mFileWidget, &QgsFileWidget::fileChanged, this, &QgsDelimitedTextSourceSelect::updateFileName );
102103
}
103104

@@ -403,6 +404,7 @@ bool QgsDelimitedTextSourceSelect::loadDelimitedFileDefinition()
403404
mFile->setUseHeader( cbxUseHeader->isChecked() );
404405
mFile->setDiscardEmptyFields( cbxSkipEmptyFields->isChecked() );
405406
mFile->setTrimFields( cbxTrimFields->isChecked() );
407+
mFile->setMaxFields( mMaxFields );
406408
return mFile->isValid();
407409
}
408410

‎src/providers/delimitedtext/qgsdelimitedtextsourceselect.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ class QgsDelimitedTextSourceSelect : public QgsAbstractDataSourceWidget, private
5050
std::unique_ptr<QgsDelimitedTextFile> mFile;
5151
int mExampleRowCount = 20;
5252
int mBadRowCount = 0;
53+
static constexpr int DEFAULT_MAX_FIELDS = 10000;
54+
int mMaxFields = DEFAULT_MAX_FIELDS; // to avoid Denial Of Service (at least in source select). Configurable through /max_fields settings sub-key.
5355
QString mSettingsKey;
5456
QString mLastFileType;
5557
QButtonGroup *bgFileFormat = nullptr;

0 commit comments

Comments
 (0)
Please sign in to comment.