diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp
index 2d4ba1aeb9cca77a03e4828e6277699133e8cbf8..4e0d70fb9ab99c13c2ccb86e60636b1ed910c83d 100644
--- a/src/widgets/dialogs/qfiledialog.cpp
+++ b/src/widgets/dialogs/qfiledialog.cpp
@@ -1938,6 +1938,8 @@ void QFileDialog::setIconProvider(QFileIconProvider *provider)
 QFileIconProvider *QFileDialog::iconProvider() const
 {
     Q_D(const QFileDialog);
+    if (!d->model)
+        return Q_NULLPTR;
     return d->model->iconProvider();
 }
 
diff --git a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp
index ffc000a418238b76e8b943545484f7a7ee7180b3..59288bd764abd2f7a1279aa238d66d5df5bc094a 100644
--- a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp
+++ b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp
@@ -165,6 +165,7 @@ private slots:
 #endif // QT_BUILD_INTERNAL
 #endif
     void rejectModalDialogs();
+    void QTBUG49600_nativeIconProviderCrash();
 
 private:
     void cleanupSettingsFile();
@@ -1487,5 +1488,13 @@ void tst_QFiledialog::rejectModalDialogs()
     QVERIFY(file.isEmpty());
 }
 
+void tst_QFiledialog::QTBUG49600_nativeIconProviderCrash()
+{
+    if (!QGuiApplicationPrivate::platformTheme()->usePlatformNativeDialog(QPlatformTheme::FileDialog))
+        QSKIP("This platform always uses widgets to realize its QFileDialog, instead of the native file dialog.");
+    QFileDialog fd;
+    fd.iconProvider();
+}
+
 QTEST_MAIN(tst_QFiledialog)
 #include "tst_qfiledialog.moc"