rev 4892 - in trunk/packages/kdepim/debian: . patches

Sune Vuorela pusling-guest at alioth.debian.org
Sat Nov 11 17:31:13 UTC 2006


Author: pusling-guest
Date: 2006-11-11 18:31:13 +0100 (Sat, 11 Nov 2006)
New Revision: 4892

Added:
   trunk/packages/kdepim/debian/patches/18_optimize_splitAddressInternal.diff
Modified:
   trunk/packages/kdepim/debian/changelog
Log:
Committed patch from upstream bts to optimeze header parsing even on 'evil headers'


Modified: trunk/packages/kdepim/debian/changelog
===================================================================
--- trunk/packages/kdepim/debian/changelog	2006-11-11 13:14:44 UTC (rev 4891)
+++ trunk/packages/kdepim/debian/changelog	2006-11-11 17:31:13 UTC (rev 4892)
@@ -1,3 +1,12 @@
+kdepim (4:3.5.5.dfsg.1-2) unstable; urgency=low
+
+  * Adds 18_optimize_splitAddressInternal.diff to fix lock up on weird
+    headers. It is actually a performance tweak, as it normally continues
+    after 10-15 minutes of non-responding state. Fix by Johannes Schaub. It
+    has a nice side effect to be a general performance boost (Closes: #398073)
+
+ -- Sune Vuorela <debian at pusling.com>  Sat, 11 Nov 2006 18:29:58 +0100
+
 kdepim (4:3.5.5.dfsg.1-1) unstable; urgency=medium
 
   * Improve KOrganizer's description, from Filipus Klutiero.

Added: trunk/packages/kdepim/debian/patches/18_optimize_splitAddressInternal.diff
===================================================================
--- trunk/packages/kdepim/debian/patches/18_optimize_splitAddressInternal.diff	2006-11-11 13:14:44 UTC (rev 4891)
+++ trunk/packages/kdepim/debian/patches/18_optimize_splitAddressInternal.diff	2006-11-11 17:31:13 UTC (rev 4892)
@@ -0,0 +1,137 @@
+Index: libemailfunctions/email.cpp
+===================================================================
+--- libemailfunctions/email.cpp	(Revision 599840)
++++ libemailfunctions/email.cpp	(Arbeitskopie)
+@@ -111,7 +111,14 @@
+   displayName = "";
+   addrSpec = "";
+   comment = "";
+-
++  
++  // these strings are later copied to displayName resp. addrSpec resp. comment
++  // we don't operate directly on those variables, since as ByteArray deriverates
++  // they have a miserable performance on operator+
++  QString dName;
++  QString aSpec;
++  QString cmmt;
++  
+   if ( address.isEmpty() )
+     return KPIM::AddressEmpty;
+ 
+@@ -129,26 +136,26 @@
+     case TopLevel : {
+       switch ( *p ) {
+       case '"' : inQuotedString = !inQuotedString;
+-                 displayName += *p;
++                 dName += *p;
+                  break;
+       case '(' : if ( !inQuotedString ) {
+                    context = InComment;
+                    commentLevel = 1;
+                  }
+                  else
+-                   displayName += *p;
++                   dName += *p;
+                  break;
+       case '<' : if ( !inQuotedString ) {
+                    context = InAngleAddress;
+                  }
+                  else
+-                   displayName += *p;
++                   dName += *p;
+                  break;
+       case '\\' : // quoted character
+-                 displayName += *p;
++                 dName += *p;
+                  ++p; // skip the '\'
+                  if ( *p )
+-                   displayName += *p;
++                   dName += *p;
+                  else
+                    return KPIM::UnexpectedEnd;
+                  break;
+@@ -159,57 +166,57 @@
+                      return KPIM::UnexpectedComma;
+                  }
+                  else
+-                   displayName += *p;
++                   dName += *p;
+                  break;
+-      default :  displayName += *p;
++      default :  dName += *p;
+       }
+       break;
+     }
+     case InComment : {
+       switch ( *p ) {
+       case '(' : ++commentLevel;
+-                 comment += *p;
++                 cmmt += *p;
+                  break;
+       case ')' : --commentLevel;
+                  if ( commentLevel == 0 ) {
+                    context = TopLevel;
+-                   comment += ' '; // separate the text of several comments
++                   cmmt += ' '; // separate the text of several comments
+                  }
+                  else
+-                   comment += *p;
++                   cmmt += *p;
+                  break;
+       case '\\' : // quoted character
+-                 comment += *p;
++                 cmmt += *p;
+                  ++p; // skip the '\'
+                  if ( *p )
+-                   comment += *p;
++                   cmmt += *p;
+                  else
+                    return KPIM::UnexpectedEnd;
+                  break;
+-      default :  comment += *p;
++      default :  cmmt += *p;
+       }
+       break;
+     }
+     case InAngleAddress : {
+       switch ( *p ) {
+       case '"' : inQuotedString = !inQuotedString;
+-                 addrSpec += *p;
++                 aSpec += *p;
+                  break;
+       case '>' : if ( !inQuotedString ) {
+                    context = TopLevel;
+                  }
+                  else
+-                   addrSpec += *p;
++                   aSpec += *p;
+                  break;
+       case '\\' : // quoted character
+-                 addrSpec += *p;
++                 aSpec += *p;
+                  ++p; // skip the '\'
+                  if ( *p )
+-                   addrSpec += *p;
++                   aSpec += *p;
+                  else
+                    return KPIM::UnexpectedEnd;
+                  break;
+-      default :  addrSpec += *p;
++      default :  aSpec += *p;
+       }
+       break;
+     }
+@@ -223,9 +230,10 @@
+   if ( context == InAngleAddress )
+     return KPIM::UnclosedAngleAddr;
+ 
+-  displayName = displayName.stripWhiteSpace();
+-  comment = comment.stripWhiteSpace();
+-  addrSpec = addrSpec.stripWhiteSpace();
++	
++  displayName = dName.stripWhiteSpace().local8Bit();
++  comment = cmmt.stripWhiteSpace().local8Bit();
++  addrSpec = aSpec.stripWhiteSpace().local8Bit();
+ 
+   if ( addrSpec.isEmpty() ) {
+     if ( displayName.isEmpty() )




More information about the pkg-kde-commits mailing list