X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Ffreenet%2Fmessagexml.cpp;h=ec5946e72facab20b3e1ef19965dc425501be3f0;hb=107bd97018964d48425306026d06afd038e84db0;hp=90bcca724f2f9d230a30f17c18c501c902d3afd4;hpb=6b896a9e1dc143bba86795be1e9336549db9b85f;p=fms.git diff --git a/src/freenet/messagexml.cpp b/src/freenet/messagexml.cpp index 90bcca7..ec5946e 100644 --- a/src/freenet/messagexml.cpp +++ b/src/freenet/messagexml.cpp @@ -25,13 +25,17 @@ std::string MessageXML::GetXML() tid->LinkEndChild(XMLCreateCDATAElement("Subject",m_subject)); tid->LinkEndChild(XMLCreateCDATAElement("MessageID",m_messageid)); tid->LinkEndChild(XMLCreateCDATAElement("ReplyBoard",m_replyboard)); - tid->LinkEndChild(XMLCreateCDATAElement("Body",m_body)); + // a little hack because TinyXML doesn't handle ]]> inside a CDATA section - manually separate into multiple CDATA sections + // TinyXML still won't be able to parse past the 1st CDATA section, but other implementations might + tid->LinkEndChild(XMLCreateCDATAElement("Body",StringFunctions::Replace(m_body,"]]>","]]]]>"))); TiXmlElement *brds=new TiXmlElement("Boards"); tid->LinkEndChild(brds); for(std::vector::iterator i=m_boards.begin(); i!=m_boards.end(); i++) { - brds->LinkEndChild(XMLCreateCDATAElement("Board",(*i))); + std::string boardname=(*i); + StringFunctions::Convert(boardname,boardname); + brds->LinkEndChild(XMLCreateCDATAElement("Board",boardname)); } if(m_inreplyto.size()>0) @@ -70,7 +74,6 @@ const bool MessageXML::ParseXML(const std::string &xml) if(!td.Error()) { TiXmlHandle hnd(&td); - TiXmlNode *node1; TiXmlNode *node2; TiXmlText *txt; @@ -100,6 +103,11 @@ const bool MessageXML::ParseXML(const std::string &xml) if(txt) { m_replyboard=txt->ValueStr(); + StringFunctions::LowerCase(m_replyboard,m_replyboard); + if(m_replyboard.size()>40) + { + m_replyboard.erase(40); + } } txt=hnd.FirstChild("Message").FirstChild("Body").FirstChild().ToText(); if(txt) @@ -112,7 +120,13 @@ const bool MessageXML::ParseXML(const std::string &xml) { if(node2->FirstChild()) { - m_boards.push_back(node2->FirstChild()->ValueStr()); + std::string boardname=node2->FirstChild()->ValueStr(); + StringFunctions::LowerCase(boardname,boardname); + if(boardname.size()>40) + { + boardname.erase(40); + } + m_boards.push_back(boardname); } node2=node2->NextSibling("Board"); }