zorba-coders team mailing list archive
-
zorba-coders team
-
Mailing list archive
-
Message #11714
[Merge] lp:~davidagraf/zorba/bug-867248 into lp:zorba/email-module
David Graf has proposed merging lp:~davidagraf/zorba/bug-867248 into lp:zorba/email-module.
Requested reviews:
David Graf (davidagraf)
For more details, see:
https://code.launchpad.net/~davidagraf/zorba/bug-867248/+merge/113059
Fix for bug #867248.
--
https://code.launchpad.net/~davidagraf/zorba/bug-867248/+merge/113059
Your team Zorba Coders is subscribed to branch lp:zorba/email-module.
=== modified file 'src/com/zorba-xquery/www/modules/email/smtp.xq.src/mime_handler.cpp'
--- src/com/zorba-xquery/www/modules/email/smtp.xq.src/mime_handler.cpp 2011-09-30 14:44:37 +0000
+++ src/com/zorba-xquery/www/modules/email/smtp.xq.src/mime_handler.cpp 2012-07-02 14:54:22 +0000
@@ -18,12 +18,13 @@
#include <cstdio>
#include <sstream>
-#include <zorba/zorba_string.h>
+#include <zorba/base64.h>
#include <zorba/iterator.h>
#include <zorba/item_factory.h>
#include <zorba/store_consts.h>
#include <zorba/user_exception.h>
#include <zorba/xquery_functions.h>
+#include <zorba/zorba_string.h>
#include "mime_handler.h"
@@ -59,6 +60,41 @@
lChildrenIt->close();
}
+/**
+ * Assigns a Zorba String to CClient value and does base64 encoding
+ * if necessary.
+ */
+void encodeStringForCClient(const zorba::String& aString, char*& aCClientVal)
+{
+ // check if string contains non ascii chars
+ bool lContainsNonAscii = false;
+ for (
+ zorba::String::const_iterator lIter = aString.begin();
+ lIter != aString.end();
+ ++lIter)
+ {
+ unsigned int u = static_cast<unsigned int>(*lIter);
+ if (!(u == '\t' || u == '\n' || u == '\t' || (u >= 32 && u <= 127)))
+ {
+ lContainsNonAscii = true;
+ break;
+ }
+ }
+
+ if (lContainsNonAscii)
+ {
+ zorba::String lEncodedValue = zorba::encoding::Base64::encode(aString);
+ zorba::String lFullValue = zorba::String("=?UTF-8?B?")
+ + lEncodedValue
+ + zorba::String("?=");
+ aCClientVal = cpystr(const_cast<char*>(lFullValue.c_str()));
+ }
+ else
+ {
+ aCClientVal = cpystr(const_cast<char*>(aString.c_str()));
+ }
+}
+
// helper function for retrieving the name and email address from an item
static void
getNameAndEmailAddress(
@@ -70,7 +106,7 @@
Iterator_t lChildren = aEmailItem.getChildren();
lChildren->open();
Item lChild;
- bool lReadName = true;
+ aName = "";
while (lChildren->next(lChild)) {
if (lChild.getNodeKind() != store::StoreConsts::elementNode) {
continue;
@@ -81,9 +117,7 @@
getNodeName(lChild, lNodeName);
if (lNodeName == "name") {
aName = lChild.getStringValue();
- lReadName = false;
} else {
- aName = "";
String lEmail = lChild.getStringValue();
int lIndexOfAt = lEmail.find('@');
aMailbox = lEmail.substr(0, lIndexOfAt).c_str();
@@ -96,9 +130,9 @@
create_mail_address(String& aName, String& aMailbox, String& aHost)
{
mail_address* address = mail_newaddr();
- address->personal = cpystr(const_cast<char*>(aName.c_str()));
- address->mailbox = cpystr(const_cast<char*>(aMailbox.c_str()));
- address->host = cpystr(const_cast<char*>(aHost.c_str()));
+ encodeStringForCClient(aName, address->personal);
+ encodeStringForCClient(aMailbox, address->mailbox);
+ encodeStringForCClient(aHost, address->host);
return address;
}
@@ -188,7 +222,7 @@
getNameAndEmailAddress(lChild, lName, lMailbox, lHost);
theEnvelope->reply_to = create_mail_address(lName, lMailbox, lHost);
} else if (lNodeName == "subject") {
- theEnvelope->subject = cpystr(const_cast<char*>(lNodeValue.c_str()));
+ encodeStringForCClient(lNodeValue, theEnvelope->subject);
} else if (lNodeName == "recipient") {
Iterator_t lRecipentChildren = lChild.getChildren();
lRecipentChildren->open();
@@ -383,7 +417,7 @@
aBody->parameter = create_param("charset", fn::upper_case(lNodeValue), NIL);
} else if (lNodeName == "contentTransferEncoding") {
set_encoding(aBody, lNodeValue);
- } else if (lNodeName ,"contentDisposition") {
+ } else if (lNodeName == "contentDisposition") {
aBody->disposition.type = cpystr(fn::upper_case(lNodeValue).c_str());
} else if (lNodeName == "contentDisposition-filename") {
if (!aBody->disposition.parameter) {
Follow ups
-
[Merge] lp:~davidagraf/zorba/bug-867248 into lp:zorba/email-module
From: noreply, 2012-07-13
-
[Merge] lp:~davidagraf/zorba/bug-867248 into lp:zorba/email-module
From: Zorba Build Bot, 2012-07-13
-
[Merge] lp:~davidagraf/zorba/bug-867248 into lp:zorba/email-module
From: Zorba Build Bot, 2012-07-13
-
[Merge] lp:~davidagraf/zorba/bug-867248 into lp:zorba/email-module
From: David Graf, 2012-07-13
-
[Merge] lp:~davidagraf/zorba/bug-867248 into lp:zorba/email-module
From: David Graf, 2012-07-13
-
Re: [Merge] lp:~davidagraf/zorba/bug-867248 into lp:zorba/email-module
From: Chris Hillery, 2012-07-12
-
Re: [Merge] lp:~davidagraf/zorba/bug-867248 into lp:zorba/email-module
From: Chris Hillery, 2012-07-03
-
Re: [Merge] lp:~davidagraf/zorba/bug-867248 into lp:zorba/email-module
From: Dennis Knochenwefel, 2012-07-03
-
Re: [Merge] lp:~davidagraf/zorba/bug-867248 into lp:zorba/email-module
From: Chris Hillery, 2012-07-02
-
Re: [Merge] lp:~davidagraf/zorba/bug-867248 into lp:zorba/email-module
From: David Graf, 2012-07-02