diff options
author | Alexandros Frantzis <alf82@freemail.gr> | 2019-10-06 17:37:04 +0300 |
---|---|---|
committer | Alexandros Frantzis <alf82@freemail.gr> | 2019-10-06 17:37:34 +0300 |
commit | 97f322e31996861686cc13e5e43b8e5fc702330a (patch) | |
tree | b98fee87ff3a31eea8ee5e58c2503b6d21cd2aca /tests | |
parent | a3a41464729cdbcd64d3e1fc9571e05b99d15ed5 (diff) |
Improve robustness of MIME part boundary handling
Handle more gracefully a few cases related to boundaries, that may
come up in malformed emails.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_boundaries.rs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/test_boundaries.rs b/tests/test_boundaries.rs new file mode 100644 index 0000000..f898d2a --- /dev/null +++ b/tests/test_boundaries.rs @@ -0,0 +1,49 @@ +// Copyright 2019 Alexandros Frantzis +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. +// +// SPDX-License-Identifier: MPL-2.0 + +use mda::{Email, EmailRegex}; + +static TEST_EMAIL_FAKE_BOUNDARY: &'static str = r#"Return-Path: <me@source.com> +To: Destination <someone.else@destination.com> +Content-type: multipart/alternative; boundary="QWFCYkN" + +--QWFCYkN +Content-transfer-encoding: base64 + +--QWFCYkNj + +--QWFCYkN +"#; + +static TEST_EMAIL_BOUNDARY_BEGIN_AFTER_END: &'static str = r#"Return-Path: <me@source.com> +To: Destination <someone.else@destination.com> +Content-type: multipart/alternative; boundary="XtT01VFrJIenjlg+ZCXSSWq4" + +--XtT01VFrJIenjlg+ZCXSSWq4-- + +--XtT01VFrJIenjlg+ZCXSSWq4 +"#; + +#[test] +fn only_exact_boundary_lines_are_parsed() { + // The "--QWFCYkNj" line should be parsed as part of the body not as a boundary. + let email = + Email::from_vec( + TEST_EMAIL_FAKE_BOUNDARY.to_string().into_bytes() + ).unwrap(); + assert!(email.body().search("AaBbCc").unwrap()); +} + +#[test] +fn boundary_begin_after_end_is_parsed() { + assert!( + Email::from_vec( + TEST_EMAIL_BOUNDARY_BEGIN_AFTER_END.to_string().into_bytes() + ).is_ok() + ); +} |