From af6b80a3d184e8984575a2cf7741058302c1c30b Mon Sep 17 00:00:00 2001 From: alwin Date: Thu, 25 Dec 2003 02:10:29 +0000 Subject: fixed an address parsing bug --- diff --git a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp index 21992b4..285561c 100644 --- a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp +++ b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp @@ -81,7 +81,36 @@ mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr ) addresses = mailimf_address_list_new_empty(); - QStringList list = QStringList::split( ',', addr ); + bool literal_open = false; + unsigned int startpos = 0; + QStringList list; + QString s; + unsigned int i = 0; + for (; i < addr.length();++i) { + switch (addr[i]) { + case '\"': + literal_open = !literal_open; + break; + case ',': + if (!literal_open) { + s = addr.mid(startpos,i-startpos); + if (!s.isEmpty()) { + list.append(s); + qDebug("Appended %s",s.latin1()); + } + // !!!! this is a MUST BE! + startpos = ++i; + } + break; + default: + break; + } + } + s = addr.mid(startpos,i-startpos); + if (!s.isEmpty()) { + list.append(s); + qDebug("Appended %s",s.latin1()); + } QStringList::Iterator it; for ( it = list.begin(); it != list.end(); it++ ) { char *str = strdup( (*it).latin1() ); @@ -91,10 +120,9 @@ mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr ) qDebug( *it ); free( str ); } else { - qDebug( "Parse success! :)" ); + qDebug( "Parse success! %s",(*it).latin1()); } } - return addresses; } @@ -625,7 +653,10 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,char*data,size_t size, SMTPaccou } err = mailsmtp_send( session, from, rcpts, data, size ); - if ( err != MAILSMTP_NO_ERROR ) {result = 0; goto free_con_session;} + if ( err != MAILSMTP_NO_ERROR ) { + qDebug("Error sending mail: %s",mailsmtpError(err).latin1()); + result = 0; goto free_con_session; + } qDebug( "Mail sent." ); storeMail(data,size,"Sent"); diff --git a/noncore/net/mail/smtpwrapper.cpp b/noncore/net/mail/smtpwrapper.cpp index 21992b4..285561c 100644 --- a/noncore/net/mail/smtpwrapper.cpp +++ b/noncore/net/mail/smtpwrapper.cpp @@ -81,7 +81,36 @@ mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr ) addresses = mailimf_address_list_new_empty(); - QStringList list = QStringList::split( ',', addr ); + bool literal_open = false; + unsigned int startpos = 0; + QStringList list; + QString s; + unsigned int i = 0; + for (; i < addr.length();++i) { + switch (addr[i]) { + case '\"': + literal_open = !literal_open; + break; + case ',': + if (!literal_open) { + s = addr.mid(startpos,i-startpos); + if (!s.isEmpty()) { + list.append(s); + qDebug("Appended %s",s.latin1()); + } + // !!!! this is a MUST BE! + startpos = ++i; + } + break; + default: + break; + } + } + s = addr.mid(startpos,i-startpos); + if (!s.isEmpty()) { + list.append(s); + qDebug("Appended %s",s.latin1()); + } QStringList::Iterator it; for ( it = list.begin(); it != list.end(); it++ ) { char *str = strdup( (*it).latin1() ); @@ -91,10 +120,9 @@ mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr ) qDebug( *it ); free( str ); } else { - qDebug( "Parse success! :)" ); + qDebug( "Parse success! %s",(*it).latin1()); } } - return addresses; } @@ -625,7 +653,10 @@ int SMTPwrapper::smtpSend(char*from,clist*rcpts,char*data,size_t size, SMTPaccou } err = mailsmtp_send( session, from, rcpts, data, size ); - if ( err != MAILSMTP_NO_ERROR ) {result = 0; goto free_con_session;} + if ( err != MAILSMTP_NO_ERROR ) { + qDebug("Error sending mail: %s",mailsmtpError(err).latin1()); + result = 0; goto free_con_session; + } qDebug( "Mail sent." ); storeMail(data,size,"Sent"); -- cgit v0.9.0.2