]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Prevent possible infinite recursion in ViewProperties
authorFrank Reininghaus <frank78ac@googlemail.com>
Sun, 23 Jun 2013 08:01:24 +0000 (10:01 +0200)
committerFrank Reininghaus <frank78ac@googlemail.com>
Sun, 23 Jun 2013 08:01:24 +0000 (10:01 +0200)
If each directory can have its own view properties, and loadting the
.directory file fails in a directory, we have to load the global view
properties. However, if we try to do this by changing the "global view
properties setting" and loading the view properties for the same
directory again, we might get an infinite recursion if changing the
setting fails.

We now force a loading of the global view properties by constructing a
new ViewProperties object with an empty URL.

Thanks to Kurt Hindenburg for helping to debug this issue (which was
only reproducible on MacOS).

BUG: 316209
FIXED-IN: 4.10.5
REVIEW: 111182

src/views/viewproperties.cpp

index 30deb7277dc0931a22eaeb6496b05e238a4a012a..d4ecfafa0822d49d867aa032fcd983545cf0465d 100644 (file)
@@ -53,7 +53,7 @@ ViewProperties::ViewProperties(const KUrl& url) :
     m_node(0)
 {
     GeneralSettings* settings = GeneralSettings::self();
-    const bool useGlobalViewProps = settings->globalViewProps();
+    const bool useGlobalViewProps = settings->globalViewProps() || url.isEmpty();
     bool useDetailsViewWithPath = false;
 
     // We try and save it to the file .directory in the directory being viewed.
@@ -100,13 +100,13 @@ ViewProperties::ViewProperties(const KUrl& url) :
             setVisibleRoles(QList<QByteArray>() << "path");
         } else {
             // The global view-properties act as default for directories without
-            // any view-property configuration
-            settings->setGlobalViewProps(true);
-
-            ViewProperties defaultProps(url);
+            // any view-property configuration. Constructing a ViewProperties 
+            // instance for an empty KUrl ensures that the global view-properties
+            // are loaded.
+            KUrl emptyUrl;
+            ViewProperties defaultProps(emptyUrl);
             setDirProperties(defaultProps);
 
-            settings->setGlobalViewProps(false);
             m_changedProps = false;
         }
     }