From 3c960708f6a0eeb3ba1841b16a30d8da9dc711a5 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Wed, 27 May 2020 17:35:09 +0200 Subject: [PATCH] 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 (cherry picked from commit fcf6203cb8ae2bc1c5f337a6461da1954fbac790) --- src/providers/delimitedtext/qgsdelimitedtextsourceselect.cpp | 2 ++ src/providers/delimitedtext/qgsdelimitedtextsourceselect.h | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/providers/delimitedtext/qgsdelimitedtextsourceselect.cpp b/src/providers/delimitedtext/qgsdelimitedtextsourceselect.cpp index d383cf2996da..7ecd0a404282 100644 --- a/src/providers/delimitedtext/qgsdelimitedtextsourceselect.cpp +++ b/src/providers/delimitedtext/qgsdelimitedtextsourceselect.cpp @@ -98,6 +98,7 @@ QgsDelimitedTextSourceSelect::QgsDelimitedTextSourceSelect( QWidget *parent, Qt: mFileWidget->setDialogTitle( tr( "Choose a Delimited Text File to Open" ) ); mFileWidget->setFilter( tr( "Text files" ) + QStringLiteral( " (*.txt *.csv *.dat *.wkt);;" ) + tr( "All files" ) + QStringLiteral( " (* *.*)" ) ); mFileWidget->setSelectedFilter( settings.value( mSettingsKey + QStringLiteral( "/file_filter" ), QString() ).toString() ); + mMaxFields = settings.value( mSettingsKey + QStringLiteral( "/max_fields" ), DEFAULT_MAX_FIELDS ).toInt(); connect( mFileWidget, &QgsFileWidget::fileChanged, this, &QgsDelimitedTextSourceSelect::updateFileName ); } @@ -401,6 +402,7 @@ bool QgsDelimitedTextSourceSelect::loadDelimitedFileDefinition() mFile->setUseHeader( cbxUseHeader->isChecked() ); mFile->setDiscardEmptyFields( cbxSkipEmptyFields->isChecked() ); mFile->setTrimFields( cbxTrimFields->isChecked() ); + mFile->setMaxFields( mMaxFields ); return mFile->isValid(); } diff --git a/src/providers/delimitedtext/qgsdelimitedtextsourceselect.h b/src/providers/delimitedtext/qgsdelimitedtextsourceselect.h index 62da1f1e65b0..ca0b14778da2 100644 --- a/src/providers/delimitedtext/qgsdelimitedtextsourceselect.h +++ b/src/providers/delimitedtext/qgsdelimitedtextsourceselect.h @@ -50,6 +50,8 @@ class QgsDelimitedTextSourceSelect : public QgsAbstractDataSourceWidget, private std::unique_ptr mFile; int mExampleRowCount = 20; int mBadRowCount = 0; + static constexpr int DEFAULT_MAX_FIELDS = 10000; + int mMaxFields = DEFAULT_MAX_FIELDS; // to avoid Denial Of Service (at least in source select). Configurable through /max_fields settings sub-key. QString mSettingsKey; QString mLastFileType; QButtonGroup *bgFileFormat = nullptr;