diff -ur kopete-3.5.6.orig/kopete/protocols/yahoo/libkyahoo/coreprotocol.cpp kopete-3.5.6/kopete/protocols/yahoo/libkyahoo/coreprotocol.cpp --- kopete-3.5.6.orig/kopete/protocols/yahoo/libkyahoo/coreprotocol.cpp 2007-05-02 21:08:52.000000000 +0300 +++ kopete-3.5.6/kopete/protocols/yahoo/libkyahoo/coreprotocol.cpp 2007-05-02 21:23:04.000000000 +0300 @@ -184,7 +184,7 @@ } else { - kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " - not a valid YMSG packet. Trying to recover." << endl; + kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " - not a valid YMSG packet. Trying to recover." << wire << endl; QTextStream s( wire, IO_ReadOnly ); QString remaining = s.read(); int pos = remaining.find( "YMSG", bytesParsed ); diff -ur kopete-3.5.6.orig/kopete/protocols/yahoo/libkyahoo/listtask.cpp kopete-3.5.6/kopete/protocols/yahoo/libkyahoo/listtask.cpp --- kopete-3.5.6.orig/kopete/protocols/yahoo/libkyahoo/listtask.cpp 2007-05-02 21:08:52.000000000 +0300 +++ kopete-3.5.6/kopete/protocols/yahoo/libkyahoo/listtask.cpp 2007-05-02 21:17:33.000000000 +0300 @@ -69,13 +69,14 @@ kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << endl; QString raw; - raw = t->firstParam( 87 ); - if( raw.isEmpty() ) + m_list.append( t->firstParam( 87 ) ); + + if( t->firstParam( 59 ).isEmpty() ) return; QStringList groups; - groups = QStringList::split( "\n", raw ); + groups = QStringList::split( "\n", m_list ); for ( QStringList::Iterator groupIt = groups.begin(); groupIt != groups.end(); ++groupIt ) { @@ -88,6 +89,7 @@ emit gotBuddy( *buddyIt, QString::null, group ); } } + m_list.truncate( 0 ); } void ListTask::parseStealthList( YMSGTransfer *t ) diff -ur kopete-3.5.6.orig/kopete/protocols/yahoo/libkyahoo/listtask.h kopete-3.5.6/kopete/protocols/yahoo/libkyahoo/listtask.h --- kopete-3.5.6.orig/kopete/protocols/yahoo/libkyahoo/listtask.h 2007-05-02 21:08:52.000000000 +0300 +++ kopete-3.5.6/kopete/protocols/yahoo/libkyahoo/listtask.h 2007-05-02 21:21:17.000000000 +0300 @@ -41,6 +41,9 @@ signals: void gotBuddy(const QString&, const QString&, const QString&); void stealthStatusChanged( const QString&, Yahoo::StealthStatus ); +private: + QString m_list; + }; #endif diff -ur kopete-3.5.6.orig/kopete/protocols/yahoo/libkyahoo/ymsgprotocol.cpp kopete-3.5.6/kopete/protocols/yahoo/libkyahoo/ymsgprotocol.cpp --- kopete-3.5.6.orig/kopete/protocols/yahoo/libkyahoo/ymsgprotocol.cpp 2007-05-02 21:08:52.000000000 +0300 +++ kopete-3.5.6/kopete/protocols/yahoo/libkyahoo/ymsgprotocol.cpp 2007-05-02 21:20:33.000000000 +0300 @@ -357,9 +357,10 @@ if (accept) value[x++] = data[pos++]; } - if (accept) + if (accept) { value[x] = 0; - pos += 2; + pos += 2; + } if (accept) { @@ -375,8 +376,9 @@ } // Packets consisting of several YMSG-packets sometimes contain padding chars (0x00) -> filter out - while( (BYTE)data[pos] == (BYTE) 0x00 && pos <= len + 20) - pos++; + while( (BYTE)data[pos] == (BYTE) 0x00 && pos <= len + 20) + pos++; + kdDebug(YAHOO_RAW_DEBUG) << k_funcinfo << " Returning transfer" << endl; // tell them we have parsed offset bytes