rpms/kdepim/devel kdepim-3.5.9-kde#127696.patch, NONE, 1.1 kdepim.spec, 1.156, 1.157

Kevin Kofler (kkofler) fedora-extras-commits at redhat.com
Fri Feb 15 07:30:39 UTC 2008


Author: kkofler

Update of /cvs/pkgs/rpms/kdepim/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv8936/devel

Modified Files:
	kdepim.spec 
Added Files:
	kdepim-3.5.9-kde#127696.patch 
Log Message:
* Fri Feb 15 2008 Kevin Kofler <Kevin at tigcc.ticalc.org> 6:3.5.9-3
- backport upstream fix for kde#127696 from enterprise branch

kdepim-3.5.9-kde#127696.patch:

--- NEW FILE kdepim-3.5.9-kde#127696.patch ---
Index: kmail/popaccount.h
===================================================================
--- kmail/popaccount.h	(revision 775014)
+++ kmail/popaccount.h	(revision 775015)
@@ -150,6 +150,7 @@
   QMap<QString, int> mTimeOfNextSeenMsgsMap; // map of uid to times of seen messages
   QDict<int> mSizeOfNextSeenMsgsDict;
   QStringList idsOfMsgsToDelete;
+  QStringList idsOfForcedDeletes;
   int indexOfCurrentMsg;
 
   QValueList<KMMessage*> msgsAwaitingProcessing;
Index: kmail/popaccount.cpp
===================================================================
--- kmail/popaccount.cpp	(revision 775014)
+++ kmail/popaccount.cpp	(revision 775015)
@@ -389,6 +389,8 @@
   idsOfMsgs.clear();
   mUidForIdMap.clear();
   idsOfMsgsToDelete.clear();
+  idsOfForcedDeletes.clear();
+
   //delete any headers if there are some this have to be done because of check again
   headersOnServer.clear();
   headers = false;
@@ -735,6 +737,12 @@
         idsOfMsgsToDelete.remove( it.key().second );
       }
     }
+
+    if ( !idsOfForcedDeletes.isEmpty() ) {
+      idsOfMsgsToDelete += idsOfForcedDeletes;
+      idsOfForcedDeletes.clear();
+    }
+
     // If there are messages to delete then delete them
     if ( !idsOfMsgsToDelete.isEmpty() ) {
       stage = Dele;
@@ -923,8 +931,8 @@
   QString qdata = data;
   qdata = qdata.simplifyWhiteSpace(); // Workaround for Maillennium POP3/UNIBOX
   int spc = qdata.find( ' ' );
-  if (spc > 0) {
-    if (stage == List) {
+  if ( stage == List ) {
+    if ( spc > 0 ) {
       QString length = qdata.mid(spc+1);
       if (length.find(' ') != -1) length.truncate(length.find(' '));
       int len = length.toInt();
@@ -933,46 +941,76 @@
       idsOfMsgs.append( id );
       mMsgsPendingDownload.insert( id, len );
     }
-    else { // stage == Uidl
-      const QString id = qdata.left(spc);
-      const QString uid = qdata.mid(spc + 1);
-      int *size = new int; //malloc(size_of(int));
-      *size = mMsgsPendingDownload[id];
-      mSizeOfNextSeenMsgsDict.insert( uid, size );
-      if ( mUidsOfSeenMsgsDict.find( uid ) != 0 ) {
+    else {
+      stage = Idle;
+      if ( job ) job->kill();
+      job = 0;
+      mSlave = 0;
+      KMessageBox::error( 0, i18n( "Unable to complete LIST operation." ),
+                             i18n( "Invalid Response From Server") );
+      return;
+    }
+  }
+  else { // stage == Uidl
+    Q_ASSERT ( stage == Uidl);
 
-        if ( mMsgsPendingDownload.contains( id ) ) {
-          mMsgsPendingDownload.remove( id );
-        }
-        else
-          kdDebug(5006) << "PopAccount::slotData synchronization failure." << endl;
-        idsOfMsgsToDelete.append( id );
-        mUidsOfNextSeenMsgsDict.insert( uid, (const int *)1 );
-        if ( mTimeOfSeenMsgsVector.empty() ) {
-          mTimeOfNextSeenMsgsMap.insert( uid, time(0) );
-        }
-        else {
-          // cast the int* with a long to can convert it to a int, BTW
-          // works with g++-4.0 and amd64
-          mTimeOfNextSeenMsgsMap.insert( uid,
-            mTimeOfSeenMsgsVector[(int)( long )mUidsOfSeenMsgsDict[uid] - 1] );
-        }
+    QString id;
+    QString uid;
+
+    if ( spc <= 0 ) {
+      // an invalid uidl line. we might just need to skip it, but
+      // some servers generate invalid uids with valid ids. in that
+      // case we will just make up a uid - which will cause us to
+      // not cache the document, but we will be able to interoperate
+
+      int testid = atoi ( qdata.ascii() );
+      if ( testid < 1 ) {
+        // we'll just have to skip this
+        kdDebug(5006) << "PopAccount::slotData skipping UIDL entry due to parse error "
+                      << endl << qdata.ascii() << endl;
+        return;
       }
-      mUidForIdMap.insert( id, uid );
+      id.setNum (testid, 10);
+
+      QString datestring, serialstring;
+
+      serialstring.setNum ( ++dataCounter, 10 );
+      datestring.setNum ( time(NULL),10 );
+      uid = QString( "uidlgen" ) + datestring + QString( "." ) + serialstring;
+      kdDebug(5006) << "PopAccount::slotData message " << id.ascii()
+                    <<  "%d has bad UIDL, cannot keep a copy on server" << endl;
+      idsOfForcedDeletes.append( id );
     }
+    else {
+      id = qdata.left( spc );
+      uid = qdata.mid( spc + 1 );
+    }
+
+    int *size = new int; //malloc(size_of(int));
+    *size = mMsgsPendingDownload[id];
+    mSizeOfNextSeenMsgsDict.insert( uid, size );
+    if ( mUidsOfSeenMsgsDict.find( uid ) != 0 ) {
+      if ( mMsgsPendingDownload.contains( id ) ) {
+        mMsgsPendingDownload.remove( id );
+      }
+      else
+        kdDebug(5006) << "PopAccount::slotData synchronization failure." << endl;
+      idsOfMsgsToDelete.append( id );
+      mUidsOfNextSeenMsgsDict.insert( uid, (const int *)1 );
+      if ( mTimeOfSeenMsgsVector.empty() ) {
+        mTimeOfNextSeenMsgsMap.insert( uid, time(0) );
+      }
+      else {
+        // cast the int* with a long to can convert it to a int, BTW
+        // works with g++-4.0 and amd64
+        mTimeOfNextSeenMsgsMap.insert( uid, mTimeOfSeenMsgsVector[(int)( long )
+                                                 mUidsOfSeenMsgsDict[uid] - 1] );
+      }
+    }
+    mUidForIdMap.insert( id, uid );
   }
-  else {
-    stage = Idle;
-    if (job) job->kill();
-    job = 0;
-    mSlave = 0;
-    KMessageBox::error(0, i18n( "Unable to complete LIST operation." ),
-                          i18n("Invalid Response From Server"));
-    return;
-  }
 }
 
-
 //-----------------------------------------------------------------------------
 void PopAccount::slotResult( KIO::Job* )
 {


Index: kdepim.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kdepim/devel/kdepim.spec,v
retrieving revision 1.156
retrieving revision 1.157
diff -u -r1.156 -r1.157
--- kdepim.spec	15 Feb 2008 06:04:22 -0000	1.156
+++ kdepim.spec	15 Feb 2008 07:29:58 -0000	1.157
@@ -35,9 +35,9 @@
 # script used to generate svn checkout Source0 above
 Source1: kdepim-enterprise-svn_checkout.sh
 
-Release: 2.%{ent_date}svn.ent%{?dist}
+Release: 3.%{ent_date}svn.ent%{?dist}
 %else
-Release: 2%{?dist}
+Release: 3%{?dist}
 Source0: ftp://ftp.kde.org/pub/kde/stable/%{version}/src/%{name}-%{version}.tar.bz2
 %endif
 
@@ -51,6 +51,11 @@
 # LANG=en_US.UTF-8 svn diff svn://anonsvn.kde.org/home/kde/tags/KDE/3.5.9/kdepim/kitchensync@774532 \
 # svn://anonsvn.kde.org/home/kde/branches/work/kitchensync-OpenSync0.30API@774532 >kdepim-3.5.9-opensync03.patch
 Patch3: kdepim-3.5.9-opensync03.patch
+# http://websvn.kde.org/?view=rev&revision=775015
+# http://bugs.kde.org/show_bug.cgi?id=127696
+# Upstream fix for "Unable to complete LIST operation" errors with some servers,
+# just missed the 3.5.9 tagging.
+Patch4: kdepim-3.5.9-kde#127696.patch
 
 ## upstream patches
 
@@ -166,6 +171,8 @@
 popd
 %endif
 
+%patch4 -p0 -b .kde127696
+
 %if %{make_cvs}
    make -f admin/Makefile.common cvs
 %endif
@@ -297,6 +304,9 @@
 
 
 %changelog
+* Fri Feb 15 2008 Kevin Kofler <Kevin at tigcc.ticalc.org> 6:3.5.9-3
+- backport upstream fix for kde#127696 from enterprise branch
+
 * Fri Feb 15 2008 Kevin Kofler <Kevin at tigcc.ticalc.org> 6:3.5.9-2
 - update opensync03 patch
 




More information about the fedora-extras-commits mailing list