aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/vmime/body.cpp35
-rw-r--r--tests/parser/bodyPartTest.cpp6
2 files changed, 11 insertions, 30 deletions
diff --git a/src/vmime/body.cpp b/src/vmime/body.cpp
index b7f491a1..4103f328 100644
--- a/src/vmime/body.cpp
+++ b/src/vmime/body.cpp
@@ -78,30 +78,12 @@ size_t body::findNextBoundaryPosition(
continue;
}
- // Skip transport padding bytes (SPACE or HTAB), if any
- size_t advance = 0;
-
- while (pos != 0) {
-
- parser->seek(pos - advance - 1);
-
- const byte_t c = parser->peekByte();
-
- if (c == ' ' || c == '\t') {
- ++advance;
- } else {
- break;
- }
- }
-
// Ensure the bytes before boundary are "[LF]--": boundary should be
// at the beginning of a line, and should start with "--"
- if (pos - advance < 3) {
+ if (pos < 3) {
continue;
}
-
- parser->seek(pos - advance - 3);
-
+ parser->seek(pos - 3);
if (!parser->matchBytes("\n--", 3)) {
continue;
}
@@ -111,21 +93,20 @@ size_t body::findNextBoundaryPosition(
const byte_t next = parser->peekByte();
// Boundary should be followed by a new line or a dash
- if (next != '\r' && next != '\n' && next != '-') {
+ if (!isspace(next) && next != '-') {
continue;
}
// Get rid of the "[CR]" just before "[LF]--", if any
- if (pos - advance >= 4) {
-
- parser->seek(pos - advance - 4);
-
+ size_t backwards = 0;
+ if (pos >= 4) {
+ parser->seek(pos - 4);
if (parser->peekByte() == '\r') {
- advance++;
+ ++backwards;
}
}
- *boundaryStart = pos - advance - 3;
+ *boundaryStart = pos - backwards - 3;
*boundaryEnd = pos + boundary.length();
return pos;
diff --git a/tests/parser/bodyPartTest.cpp b/tests/parser/bodyPartTest.cpp
index 91742553..062007d9 100644
--- a/tests/parser/bodyPartTest.cpp
+++ b/tests/parser/bodyPartTest.cpp
@@ -213,9 +213,9 @@ VMIME_TEST_SUITE_BEGIN(bodyPartTest)
vmime::string str =
"Content-Type: multipart/mixed; boundary=\"MY-BOUNDARY\""
"\r\n\r\n"
- "-- \t MY-BOUNDARY\r\nHEADER1\r\n\r\nBODY1\r\n"
+ "--MY-BOUNDARY \t \r\nHEADER1\r\n\r\nBODY1\r\n"
"--MY-BOUNDARY\r\n"
- "-- MY-BOUNDARY--\r\n";
+ "--MY-BOUNDARY-- \r\n";
vmime::bodyPart p;
p.parse(str);
@@ -291,7 +291,7 @@ VMIME_TEST_SUITE_BEGIN(bodyPartTest)
vmime::string str =
"Content-Type: multipart/mixed"
"\r\n\r\n"
- "-- \t UNKNOWN-BOUNDARY\r\nHEADER1\r\n\r\nBODY1\r\n"
+ "--UNKNOWN-BOUNDARY \t \r\nHEADER1\r\n\r\nBODY1\r\n"
"--UNKNOWN-BOUNDARY\r\nHEADER2\r\n\r\nBODY2\r\n"
"--UNKNOWN-BOUNDARY--";