aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbmagistro <[email protected]>2023-12-31 15:10:18 +0000
committerGitHub <[email protected]>2023-12-31 15:10:18 +0000
commit6fd4de8fb59dd58a796522425cd537625dd5b00b (patch)
tree2a7a40fd80038a5f6e61e609819c85af4418069c
parentConfigurable email add domain (#287) (diff)
downloadvmime-6fd4de8fb59dd58a796522425cd537625dd5b00b.tar.gz
vmime-6fd4de8fb59dd58a796522425cd537625dd5b00b.zip
Add parsing feedback via parsingContext (#280)
* Add parsing feedback via parsingContext Changes the parsing context to be modifiable to be able to provide feedback on the parsing. This allows the user to check if header recovery was necessary, for example, while parsing the current message. Signed-off-by: Ben Magistro <[email protected]> Co-authored-by: Vincent Richard <[email protected]>
-rw-r--r--src/vmime/address.cpp2
-rw-r--r--src/vmime/address.hpp2
-rw-r--r--src/vmime/addressList.cpp2
-rw-r--r--src/vmime/addressList.hpp2
-rw-r--r--src/vmime/body.cpp2
-rw-r--r--src/vmime/body.hpp2
-rw-r--r--src/vmime/bodyPart.cpp2
-rw-r--r--src/vmime/bodyPart.hpp2
-rw-r--r--src/vmime/charset.cpp2
-rw-r--r--src/vmime/charset.hpp2
-rw-r--r--src/vmime/component.cpp10
-rw-r--r--src/vmime/component.hpp10
-rw-r--r--src/vmime/contentDisposition.cpp2
-rw-r--r--src/vmime/contentDisposition.hpp2
-rw-r--r--src/vmime/dateTime.cpp2
-rw-r--r--src/vmime/dateTime.hpp2
-rw-r--r--src/vmime/disposition.cpp2
-rw-r--r--src/vmime/disposition.hpp2
-rw-r--r--src/vmime/emailAddress.cpp2
-rw-r--r--src/vmime/emailAddress.hpp2
-rw-r--r--src/vmime/encoding.cpp2
-rw-r--r--src/vmime/encoding.hpp2
-rw-r--r--src/vmime/header.cpp2
-rw-r--r--src/vmime/header.hpp2
-rw-r--r--src/vmime/headerField.cpp6
-rw-r--r--src/vmime/headerField.hpp4
-rw-r--r--src/vmime/mailbox.cpp2
-rw-r--r--src/vmime/mailbox.hpp2
-rw-r--r--src/vmime/mailboxField.cpp2
-rw-r--r--src/vmime/mailboxField.hpp2
-rw-r--r--src/vmime/mailboxGroup.cpp2
-rw-r--r--src/vmime/mailboxGroup.hpp2
-rw-r--r--src/vmime/mailboxList.cpp2
-rw-r--r--src/vmime/mailboxList.hpp2
-rw-r--r--src/vmime/mediaType.cpp2
-rw-r--r--src/vmime/mediaType.hpp2
-rw-r--r--src/vmime/messageId.cpp4
-rw-r--r--src/vmime/messageId.hpp4
-rw-r--r--src/vmime/messageIdSequence.cpp2
-rw-r--r--src/vmime/messageIdSequence.hpp2
-rw-r--r--src/vmime/parameter.cpp4
-rw-r--r--src/vmime/parameter.hpp4
-rw-r--r--src/vmime/parameterizedHeaderField.cpp2
-rw-r--r--src/vmime/parameterizedHeaderField.hpp2
-rw-r--r--src/vmime/parsingContext.cpp12
-rw-r--r--src/vmime/parsingContext.hpp23
-rw-r--r--src/vmime/path.cpp2
-rw-r--r--src/vmime/path.hpp2
-rw-r--r--src/vmime/relay.cpp2
-rw-r--r--src/vmime/relay.hpp2
-rw-r--r--src/vmime/text.cpp6
-rw-r--r--src/vmime/text.hpp6
-rw-r--r--src/vmime/word.cpp8
-rw-r--r--src/vmime/word.hpp8
54 files changed, 112 insertions, 77 deletions
diff --git a/src/vmime/address.cpp b/src/vmime/address.cpp
index 5333ae52..5703a389 100644
--- a/src/vmime/address.cpp
+++ b/src/vmime/address.cpp
@@ -66,7 +66,7 @@ address-list = (address *("," address)) / obs-addr-list
*/
shared_ptr <address> address::parseNext(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/address.hpp b/src/vmime/address.hpp
index 347eb500..172eeda3 100644
--- a/src/vmime/address.hpp
+++ b/src/vmime/address.hpp
@@ -73,7 +73,7 @@ public:
* @return a new address object, or null if no more address is available in the input buffer
*/
static shared_ptr <address> parseNext(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/addressList.cpp b/src/vmime/addressList.cpp
index ad6ce915..75f62245 100644
--- a/src/vmime/addressList.cpp
+++ b/src/vmime/addressList.cpp
@@ -50,7 +50,7 @@ addressList::~addressList() {
void addressList::parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/addressList.hpp b/src/vmime/addressList.hpp
index 69cbd74a..906fa420 100644
--- a/src/vmime/addressList.hpp
+++ b/src/vmime/addressList.hpp
@@ -176,7 +176,7 @@ protected:
// Component parsing & assembling
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/body.cpp b/src/vmime/body.cpp
index a3875b9d..1d8ae847 100644
--- a/src/vmime/body.cpp
+++ b/src/vmime/body.cpp
@@ -122,7 +122,7 @@ size_t body::findNextBoundaryPosition(
void body::parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const shared_ptr <utility::parserInputStreamAdapter>& parser,
const size_t position,
const size_t end,
diff --git a/src/vmime/body.hpp b/src/vmime/body.hpp
index 7ece000e..a17d1dbe 100644
--- a/src/vmime/body.hpp
+++ b/src/vmime/body.hpp
@@ -343,7 +343,7 @@ protected:
// Component parsing & assembling
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const shared_ptr <utility::parserInputStreamAdapter>& parser,
const size_t position,
const size_t end,
diff --git a/src/vmime/bodyPart.cpp b/src/vmime/bodyPart.cpp
index ff81994d..5c59fe5c 100644
--- a/src/vmime/bodyPart.cpp
+++ b/src/vmime/bodyPart.cpp
@@ -37,7 +37,7 @@ bodyPart::bodyPart()
void bodyPart::parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const shared_ptr <utility::parserInputStreamAdapter>& parser,
const size_t position,
const size_t end,
diff --git a/src/vmime/bodyPart.hpp b/src/vmime/bodyPart.hpp
index f63b3675..e7e5ade5 100644
--- a/src/vmime/bodyPart.hpp
+++ b/src/vmime/bodyPart.hpp
@@ -133,7 +133,7 @@ protected:
// Component parsing & assembling
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const shared_ptr <utility::parserInputStreamAdapter>& parser,
const size_t position,
const size_t end,
diff --git a/src/vmime/charset.cpp b/src/vmime/charset.cpp
index 24d36307..bb769f2b 100644
--- a/src/vmime/charset.cpp
+++ b/src/vmime/charset.cpp
@@ -64,7 +64,7 @@ charset::charset(const charset& other)
void charset::parseImpl(
- const parsingContext& /* ctx */,
+ parsingContext& /* ctx */,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/charset.hpp b/src/vmime/charset.hpp
index fbe90946..00629e28 100644
--- a/src/vmime/charset.hpp
+++ b/src/vmime/charset.hpp
@@ -155,7 +155,7 @@ protected:
// Component parsing & assembling
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/component.cpp b/src/vmime/component.cpp
index 7adf8f71..99c06548 100644
--- a/src/vmime/component.cpp
+++ b/src/vmime/component.cpp
@@ -65,7 +65,7 @@ void component::parse(
void component::parse(
- const parsingContext& ctx,
+ parsingContext& ctx,
const shared_ptr <utility::inputStream>& inputStream,
const size_t position,
const size_t end,
@@ -106,7 +106,7 @@ void component::parse(const string& buffer) {
}
-void component::parse(const parsingContext& ctx, const string& buffer) {
+void component::parse(parsingContext& ctx, const string& buffer) {
m_parsedOffset = m_parsedLength = 0;
@@ -128,7 +128,7 @@ void component::parse(
void component::parse(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end, size_t* newPosition
@@ -157,7 +157,7 @@ void component::offsetParsedBounds(const size_t offset) {
void component::parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const shared_ptr <utility::parserInputStreamAdapter>& parser,
const size_t position,
const size_t end,
@@ -181,7 +181,7 @@ void component::parseImpl(
void component::parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/component.hpp b/src/vmime/component.hpp
index 91164c30..40f87ff0 100644
--- a/src/vmime/component.hpp
+++ b/src/vmime/component.hpp
@@ -59,7 +59,7 @@ public:
* @param ctx parsing context
* @param buffer input buffer
*/
- void parse(const parsingContext& ctx, const string& buffer);
+ void parse(parsingContext& ctx, const string& buffer);
/** Parse RFC-822/MIME data for this component. If stream is not seekable,
* or if length is not specified, entire contents of the stream will
@@ -94,7 +94,7 @@ public:
* @param newPosition will receive the new position in the input buffer
*/
void parse(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
@@ -129,7 +129,7 @@ public:
* @param newPosition will receive the new position in the input stream
*/
void parse(
- const parsingContext& ctx,
+ parsingContext& ctx,
const shared_ptr <utility::inputStream>& inputStream,
const size_t position,
const size_t end,
@@ -228,7 +228,7 @@ protected:
// AT LEAST ONE of these parseImpl() functions MUST be implemented in derived class
virtual void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const shared_ptr <utility::parserInputStreamAdapter>& parser,
const size_t position,
const size_t end,
@@ -236,7 +236,7 @@ protected:
);
virtual void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/contentDisposition.cpp b/src/vmime/contentDisposition.cpp
index 1602273c..8c78475e 100644
--- a/src/vmime/contentDisposition.cpp
+++ b/src/vmime/contentDisposition.cpp
@@ -47,7 +47,7 @@ contentDisposition::contentDisposition(const contentDisposition& type)
void contentDisposition::parseImpl(
- const parsingContext& /* ctx */,
+ parsingContext& /* ctx */,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/contentDisposition.hpp b/src/vmime/contentDisposition.hpp
index 636c0fb5..d2a80678 100644
--- a/src/vmime/contentDisposition.hpp
+++ b/src/vmime/contentDisposition.hpp
@@ -77,7 +77,7 @@ protected:
// Component parsing & assembling
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/dateTime.cpp b/src/vmime/dateTime.cpp
index 84a5ba3f..9dde881b 100644
--- a/src/vmime/dateTime.cpp
+++ b/src/vmime/dateTime.cpp
@@ -76,7 +76,7 @@ static const char* monthNames[] = {
};
void datetime::parseImpl(
- const parsingContext& /* ctx */,
+ parsingContext& /* ctx */,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/dateTime.hpp b/src/vmime/dateTime.hpp
index 64e8dad4..2a69cc2e 100644
--- a/src/vmime/dateTime.hpp
+++ b/src/vmime/dateTime.hpp
@@ -253,7 +253,7 @@ protected:
// Component parsing & assembling
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/disposition.cpp b/src/vmime/disposition.cpp
index 4c808013..c8fa617a 100644
--- a/src/vmime/disposition.cpp
+++ b/src/vmime/disposition.cpp
@@ -187,7 +187,7 @@ const std::vector <string> disposition::getModifierList() const {
void disposition::parseImpl(
- const parsingContext& /* ctx */,
+ parsingContext& /* ctx */,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/disposition.hpp b/src/vmime/disposition.hpp
index 37a98eef..c8e419ba 100644
--- a/src/vmime/disposition.hpp
+++ b/src/vmime/disposition.hpp
@@ -142,7 +142,7 @@ protected:
// Component parsing & assembling
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/emailAddress.cpp b/src/vmime/emailAddress.cpp
index 00ae418f..55975b11 100644
--- a/src/vmime/emailAddress.cpp
+++ b/src/vmime/emailAddress.cpp
@@ -176,7 +176,7 @@ emailAddress::emailAddress(const word& localName, const word& domainName)
void emailAddress::parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/emailAddress.hpp b/src/vmime/emailAddress.hpp
index 78249967..f7cca383 100644
--- a/src/vmime/emailAddress.hpp
+++ b/src/vmime/emailAddress.hpp
@@ -113,7 +113,7 @@ public:
// Component parsing & assembling
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/encoding.cpp b/src/vmime/encoding.cpp
index 23814a67..132c010f 100644
--- a/src/vmime/encoding.cpp
+++ b/src/vmime/encoding.cpp
@@ -62,7 +62,7 @@ encoding::encoding(const encoding& enc)
void encoding::parseImpl(
- const parsingContext& /* ctx */,
+ parsingContext& /* ctx */,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/encoding.hpp b/src/vmime/encoding.hpp
index 2ff17ef6..42e07f92 100644
--- a/src/vmime/encoding.hpp
+++ b/src/vmime/encoding.hpp
@@ -158,7 +158,7 @@ protected:
// Component parsing & assembling
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/header.cpp b/src/vmime/header.cpp
index c7d7ca08..b2367dfa 100644
--- a/src/vmime/header.cpp
+++ b/src/vmime/header.cpp
@@ -62,7 +62,7 @@ field-body-contents =
*/
void header::parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/header.hpp b/src/vmime/header.hpp
index 7b4a1616..2d4fa772 100644
--- a/src/vmime/header.hpp
+++ b/src/vmime/header.hpp
@@ -340,7 +340,7 @@ protected:
// Component parsing & assembling
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/headerField.cpp b/src/vmime/headerField.cpp
index bff365dc..077d3a2a 100644
--- a/src/vmime/headerField.cpp
+++ b/src/vmime/headerField.cpp
@@ -75,7 +75,7 @@ headerField& headerField::operator=(const headerField& other) {
shared_ptr <headerField> headerField::parseNext(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
@@ -125,6 +125,8 @@ shared_ptr <headerField> headerField::parseNext(
if (buffer[pos] != ':') {
+ // header field recovery is necessary, update flag in parsing context
+ ctx.setHeaderRecoveryNeeded(true);
switch (ctx.getHeaderParseErrorRecoveryMethod()) {
case vmime::headerParseRecoveryMethod::SKIP_LINE:
@@ -261,7 +263,7 @@ shared_ptr <headerField> headerField::parseNext(
void headerField::parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/headerField.hpp b/src/vmime/headerField.hpp
index 66e99460..dba5719b 100644
--- a/src/vmime/headerField.hpp
+++ b/src/vmime/headerField.hpp
@@ -153,7 +153,7 @@ public:
* in the input buffer
*/
static shared_ptr <headerField> parseNext(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
@@ -165,7 +165,7 @@ public:
protected:
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/mailbox.cpp b/src/vmime/mailbox.cpp
index 30a082ea..23f46d9a 100644
--- a/src/vmime/mailbox.cpp
+++ b/src/vmime/mailbox.cpp
@@ -69,7 +69,7 @@ angle-addr = [CFWS] "<" addr-spec ">" [CFWS] / obs-angle-addr
*/
void mailbox::parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/mailbox.hpp b/src/vmime/mailbox.hpp
index c563129d..b204f097 100644
--- a/src/vmime/mailbox.hpp
+++ b/src/vmime/mailbox.hpp
@@ -101,7 +101,7 @@ public:
// Component parsing & assembling
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/mailboxField.cpp b/src/vmime/mailboxField.cpp
index 84c8f3d5..27752ec2 100644
--- a/src/vmime/mailboxField.cpp
+++ b/src/vmime/mailboxField.cpp
@@ -43,7 +43,7 @@ mailboxField::mailboxField(const mailboxField&)
void mailboxField::parse(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/mailboxField.hpp b/src/vmime/mailboxField.hpp
index 6c653616..f190686d 100644
--- a/src/vmime/mailboxField.hpp
+++ b/src/vmime/mailboxField.hpp
@@ -51,7 +51,7 @@ protected:
public:
void parse(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/mailboxGroup.cpp b/src/vmime/mailboxGroup.cpp
index 3baa3329..ff9c74ff 100644
--- a/src/vmime/mailboxGroup.cpp
+++ b/src/vmime/mailboxGroup.cpp
@@ -54,7 +54,7 @@ mailboxGroup::~mailboxGroup() {
void mailboxGroup::parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/mailboxGroup.hpp b/src/vmime/mailboxGroup.hpp
index 4a7da3e3..494f22a3 100644
--- a/src/vmime/mailboxGroup.hpp
+++ b/src/vmime/mailboxGroup.hpp
@@ -184,7 +184,7 @@ protected:
// Component parsing & assembling
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/mailboxList.cpp b/src/vmime/mailboxList.cpp
index 84c06d83..984d1e09 100644
--- a/src/vmime/mailboxList.cpp
+++ b/src/vmime/mailboxList.cpp
@@ -191,7 +191,7 @@ const std::vector <shared_ptr <component> > mailboxList::getChildComponents() {
void mailboxList::parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/mailboxList.hpp b/src/vmime/mailboxList.hpp
index 8d799d2c..d81a9fe1 100644
--- a/src/vmime/mailboxList.hpp
+++ b/src/vmime/mailboxList.hpp
@@ -162,7 +162,7 @@ protected:
// Component parsing & assembling
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/mediaType.cpp b/src/vmime/mediaType.cpp
index 7f68ab36..46163bca 100644
--- a/src/vmime/mediaType.cpp
+++ b/src/vmime/mediaType.cpp
@@ -56,7 +56,7 @@ mediaType::mediaType(const mediaType& other)
void mediaType::parseImpl(
- const parsingContext& /* ctx */,
+ parsingContext& /* ctx */,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/mediaType.hpp b/src/vmime/mediaType.hpp
index b18ed0fc..80028afc 100644
--- a/src/vmime/mediaType.hpp
+++ b/src/vmime/mediaType.hpp
@@ -98,7 +98,7 @@ protected:
// Component parsing & assembling
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/messageId.cpp b/src/vmime/messageId.cpp
index c8ea6426..35712f30 100644
--- a/src/vmime/messageId.cpp
+++ b/src/vmime/messageId.cpp
@@ -64,7 +64,7 @@ messageId::messageId(const string& left, const string& right)
*/
void messageId::parseImpl(
- const parsingContext& /* ctx */,
+ parsingContext& /* ctx */,
const string& buffer,
const size_t position,
const size_t end,
@@ -158,7 +158,7 @@ void messageId::parseImpl(
shared_ptr <messageId> messageId::parseNext(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/messageId.hpp b/src/vmime/messageId.hpp
index 8edbe3e3..4d19b361 100644
--- a/src/vmime/messageId.hpp
+++ b/src/vmime/messageId.hpp
@@ -106,7 +106,7 @@ protected:
// Component parsing & assembling
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
@@ -129,7 +129,7 @@ protected:
* @return a new message-id object, or null if no more message-id can be parsed from the input buffer
*/
static shared_ptr <messageId> parseNext(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/messageIdSequence.cpp b/src/vmime/messageIdSequence.cpp
index 2b68bcc7..e1d324a1 100644
--- a/src/vmime/messageIdSequence.cpp
+++ b/src/vmime/messageIdSequence.cpp
@@ -84,7 +84,7 @@ const std::vector <shared_ptr <component> > messageIdSequence::getChildComponent
void messageIdSequence::parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/messageIdSequence.hpp b/src/vmime/messageIdSequence.hpp
index e5d0eb64..a675f9c8 100644
--- a/src/vmime/messageIdSequence.hpp
+++ b/src/vmime/messageIdSequence.hpp
@@ -153,7 +153,7 @@ protected:
// Component parsing & assembling
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/parameter.cpp b/src/vmime/parameter.cpp
index 41b37a46..5cb5b759 100644
--- a/src/vmime/parameter.cpp
+++ b/src/vmime/parameter.cpp
@@ -116,7 +116,7 @@ void parameter::setValue(const word& value) {
void parameter::parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
@@ -138,7 +138,7 @@ void parameter::parseImpl(
void parameter::parse(
- const parsingContext& ctx,
+ parsingContext& ctx,
const std::vector <valueChunk>& chunks
) {
diff --git a/src/vmime/parameter.hpp b/src/vmime/parameter.hpp
index f965bade..cd4ac49f 100644
--- a/src/vmime/parameter.hpp
+++ b/src/vmime/parameter.hpp
@@ -143,7 +143,7 @@ public:
protected:
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
@@ -160,7 +160,7 @@ protected:
private:
void parse(
- const parsingContext& ctx,
+ parsingContext& ctx,
const std::vector <valueChunk>& chunks
);
diff --git a/src/vmime/parameterizedHeaderField.cpp b/src/vmime/parameterizedHeaderField.cpp
index 6815fad1..af984951 100644
--- a/src/vmime/parameterizedHeaderField.cpp
+++ b/src/vmime/parameterizedHeaderField.cpp
@@ -78,7 +78,7 @@ struct paramInfo {
void parameterizedHeaderField::parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/parameterizedHeaderField.hpp b/src/vmime/parameterizedHeaderField.hpp
index d884f1fb..689aae2b 100644
--- a/src/vmime/parameterizedHeaderField.hpp
+++ b/src/vmime/parameterizedHeaderField.hpp
@@ -200,7 +200,7 @@ private:
protected:
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/parsingContext.cpp b/src/vmime/parsingContext.cpp
index ae14715f..e80eab78 100644
--- a/src/vmime/parsingContext.cpp
+++ b/src/vmime/parsingContext.cpp
@@ -61,6 +61,18 @@ void parsingContext::setHeaderParseErrorRecoveryMethod(
}
+bool parsingContext::getHeaderRecoveryNeeded() const {
+
+ return m_headerParseRecoveryNeeded;
+}
+
+
+void parsingContext::setHeaderRecoveryNeeded(bool needed) {
+
+ m_headerParseRecoveryNeeded = needed;
+}
+
+
bool parsingContext::getUseMyHostname() const {
return m_useMyHostname;
diff --git a/src/vmime/parsingContext.hpp b/src/vmime/parsingContext.hpp
index f8feabfb..95c51959 100644
--- a/src/vmime/parsingContext.hpp
+++ b/src/vmime/parsingContext.hpp
@@ -51,6 +51,8 @@ struct headerParseRecoveryMethod {
*/
class VMIME_EXPORT parsingContext : public context {
+ friend class headerField;
+
public:
parsingContext();
@@ -77,7 +79,15 @@ public:
*/
headerParseRecoveryMethod::headerLineError getHeaderParseErrorRecoveryMethod() const;
- /** Return the current hostname adding behavior when parsing/creating a header field that
+ /** Returns a boolean indicating if utilizing the header recovery mechanism
+ * was necessary.
+ *
+ * @retval true The header recovery mechanism was necessary when parsing
+ * @retval false The header recovery mechanism was not necessary when parsing
+ */
+ bool getHeaderRecoveryNeeded() const;
+
+ /** Return the current hostname adding behavior when parsing/creating a header field that
* utilizes a domain name.
*
* @retval true The local hostname will be appended if a domain is not present
@@ -95,6 +105,17 @@ protected:
headerParseRecoveryMethod::headerLineError m_headerParseErrorRecovery;
+ /** Flag to indicate if the header recovery mechanism was used while parsing
+ * as only one method is ever in use, a simple boolean is sufficent
+ */
+ bool m_headerParseRecoveryNeeded{false};
+
+ /** Sets a flag indicating that the header recovery mechanism was required
+ *
+ * This should only be called from headerField::parseNext
+ */
+ void setHeaderRecoveryNeeded(bool needed);
+
/** Flag to indicate if the local hostname should be used/appended
* for header fields when one is not present.
*/
diff --git a/src/vmime/path.cpp b/src/vmime/path.cpp
index 9b94875a..a3aaff21 100644
--- a/src/vmime/path.cpp
+++ b/src/vmime/path.cpp
@@ -115,7 +115,7 @@ const std::vector <shared_ptr <component> > path::getChildComponents() {
void path::parseImpl(
- const parsingContext& /* ctx */,
+ parsingContext& /* ctx */,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/path.hpp b/src/vmime/path.hpp
index d63ee674..62aa0810 100644
--- a/src/vmime/path.hpp
+++ b/src/vmime/path.hpp
@@ -84,7 +84,7 @@ protected:
// Component parsing & assembling
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/relay.cpp b/src/vmime/relay.cpp
index b0a6b60f..f989615d 100644
--- a/src/vmime/relay.cpp
+++ b/src/vmime/relay.cpp
@@ -58,7 +58,7 @@ relay::relay(const relay& r)
*/
void relay::parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/relay.hpp b/src/vmime/relay.hpp
index f4676026..3bdeecb4 100644
--- a/src/vmime/relay.hpp
+++ b/src/vmime/relay.hpp
@@ -86,7 +86,7 @@ private:
protected:
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/text.cpp b/src/vmime/text.cpp
index 123ce007..a6172633 100644
--- a/src/vmime/text.cpp
+++ b/src/vmime/text.cpp
@@ -67,7 +67,7 @@ text::~text() {
void text::parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
@@ -401,7 +401,7 @@ shared_ptr <text> text::decodeAndUnfold(const string& in) {
}
-shared_ptr <text> text::decodeAndUnfold(const parsingContext& ctx, const string& in) {
+shared_ptr <text> text::decodeAndUnfold(parsingContext& ctx, const string& in) {
shared_ptr <text> t = make_shared <text>();
@@ -417,7 +417,7 @@ text* text::decodeAndUnfold(const string& in, text* generateInExisting) {
}
-text* text::decodeAndUnfold(const parsingContext& ctx, const string& in, text* generateInExisting) {
+text* text::decodeAndUnfold(parsingContext& ctx, const string& in, text* generateInExisting) {
text* out = generateInExisting ? generateInExisting : new text();
diff --git a/src/vmime/text.hpp b/src/vmime/text.hpp
index 143f5270..3b439e38 100644
--- a/src/vmime/text.hpp
+++ b/src/vmime/text.hpp
@@ -229,7 +229,7 @@ public:
* @param in input string
* @return new text object
*/
- static shared_ptr <text> decodeAndUnfold(const parsingContext& ctx, const string& in);
+ static shared_ptr <text> decodeAndUnfold(parsingContext& ctx, const string& in);
/** Decode and unfold text (RFC-2047), using the default parsing context.
*
@@ -253,7 +253,7 @@ public:
* @return new text object or existing object if generateInExisting != NULL
*/
static text* decodeAndUnfold(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& in,
text* generateInExisting
);
@@ -265,7 +265,7 @@ protected:
// Component parsing & assembling
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/word.cpp b/src/vmime/word.cpp
index 2607e90d..d4bf85cf 100644
--- a/src/vmime/word.cpp
+++ b/src/vmime/word.cpp
@@ -78,7 +78,7 @@ word::word(const string& buffer, const charset& charset, const string& lang)
shared_ptr <word> word::parseNext(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
@@ -255,7 +255,7 @@ shared_ptr <word> word::parseNext(
const std::vector <shared_ptr <word> > word::parseMultiple(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
@@ -282,7 +282,7 @@ const std::vector <shared_ptr <word> > word::parseMultiple(
void word::parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
@@ -294,7 +294,7 @@ void word::parseImpl(
void word::parseWithState(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
diff --git a/src/vmime/word.hpp b/src/vmime/word.hpp
index 1565a0be..c90d908e 100644
--- a/src/vmime/word.hpp
+++ b/src/vmime/word.hpp
@@ -198,7 +198,7 @@ public:
protected:
void parseImpl(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
@@ -213,7 +213,7 @@ protected:
) const;
void parseWithState(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
@@ -241,7 +241,7 @@ public:
private:
static shared_ptr <word> parseNext(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,
@@ -250,7 +250,7 @@ private:
);
static const std::vector <shared_ptr <word> > parseMultiple(
- const parsingContext& ctx,
+ parsingContext& ctx,
const string& buffer,
const size_t position,
const size_t end,