[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/kio/kio
From:       Flavio Castelli <flavio.castelli () gmail ! com>
Date:       2009-01-20 13:18:24
Message-ID: 1232457504.629217.8175.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 914106 by micron:

prevent use of unitialized struct, should help with bug #165548 - kde4
crashes with SIGSEGV during package upgrade


 M  +15 -14    kdirwatch.cpp  


--- trunk/KDE/kdelibs/kio/kio/kdirwatch.cpp #914105:914106
@@ -342,29 +342,30 @@
           }
           if (event->mask & (IN_DELETE|IN_MOVED_FROM)) {
             if ((e->isDir) && (!e->m_clients.empty())) {
-                Client* client = 0;
+              Client* client = 0;
               // A file in this directory has been removed.  It wasn't an explicitly
               // watched file as it would have its own watch descriptor, so
               // no addEntry/ removeEntry bookkeeping should be required.  Emit
               // the event immediately if any clients are interested.
               KDE_struct_stat stat_buf;
               QByteArray tpath = QFile::encodeName(e->path+'/'+path);
-              KDE_stat(tpath, &stat_buf);
-              bool isDir = S_ISDIR(stat_buf.st_mode);
+              if (KDE_stat(tpath, &stat_buf) == 0) {
+                bool isDir = S_ISDIR(stat_buf.st_mode);
 
-              KDirWatch::WatchModes flag;
-              flag = isDir ? KDirWatch::WatchSubDirs : KDirWatch::WatchFiles;
+                KDirWatch::WatchModes flag;
+                flag = isDir ? KDirWatch::WatchSubDirs : KDirWatch::WatchFiles;
 
-              int counter = 0;
-              Q_FOREACH(client, e->m_clients) {
-                  if (client->m_watchModes & flag) {
-                      counter++;
-                   }
+                int counter = 0;
+                Q_FOREACH(client, e->m_clients) {
+                    if (client->m_watchModes & flag) {
+                        counter++;
+                    }
+                }
+                if (counter != 0)
+                {
+                  emitEvent (e, Deleted, e->path+'/'+path);
+                }
               }
-              if (counter != 0)
-              {
-                emitEvent (e, Deleted, e->path+'/'+path);
-              }
             }
           }
           if (event->mask & (IN_MODIFY|IN_ATTRIB)) {
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic