From e6918187568dbd01842d8d1d2c808ce16a894239 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 21 Apr 2024 13:54:28 +0200 Subject: Adding upstream version 18.2.2. Signed-off-by: Daniel Baumann --- src/test/mime.cc | 150 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 src/test/mime.cc (limited to 'src/test/mime.cc') diff --git a/src/test/mime.cc b/src/test/mime.cc new file mode 100644 index 000000000..29c73e5a0 --- /dev/null +++ b/src/test/mime.cc @@ -0,0 +1,150 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab +/* + * Ceph - scalable distributed file system + * + * Copyright (C) 2011 New Dream Network + * + * This is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software + * Foundation. See file COPYING. + * + */ +#include "common/mime.h" +#include "gtest/gtest.h" + +#include +#include + +using std::string; + +TEST(MimeTests, SimpleEncode) { + char output[256]; + memset(output, 0, sizeof(output)); + int len; + + len = mime_encode_as_qp("abc", NULL, 0); + ASSERT_EQ(len, 4); + len = mime_encode_as_qp("abc", output, 4); + ASSERT_EQ(len, 4); + ASSERT_EQ(string("abc"), string(output)); + + len = mime_encode_as_qp("a=b", NULL, 0); + ASSERT_EQ(len, 6); + len = mime_encode_as_qp("a=b", output, 6); + ASSERT_EQ(len, 6); + ASSERT_EQ(string("a=3Db"), string(output)); + + len = mime_encode_as_qp("Libert\xc3\xa9", NULL, 0); + ASSERT_EQ(len, 13); + len = mime_encode_as_qp("Libert\xc3\xa9", output, 13); + ASSERT_EQ(len, 13); + ASSERT_EQ(string("Libert=C3=A9"), string(output)); +} + +TEST(MimeTests, EncodeOutOfSpace) { + char output[256]; + memset(output, 0, sizeof(output)); + int len; + + len = mime_encode_as_qp("abcdefg", NULL, 0); + ASSERT_EQ(len, 8); + len = mime_encode_as_qp("abcdefg", output, 4); + ASSERT_EQ(len, 8); + ASSERT_EQ(string("abc"), string(output)); + len = mime_encode_as_qp("abcdefg", output, 1); + ASSERT_EQ(len, 8); + ASSERT_EQ(string(""), string(output)); + + len = mime_encode_as_qp("a=b", output, 2); + ASSERT_EQ(len, 6); + ASSERT_EQ(string("a"), string(output)); + len = mime_encode_as_qp("a=b", output, 3); + ASSERT_EQ(len, 6); + ASSERT_EQ(string("a"), string(output)); +} + +TEST(MimeTests, SimpleDecode) { + char output[256]; + memset(output, 0, sizeof(output)); + int len; + + len = mime_decode_from_qp("abc", NULL, 0); + ASSERT_EQ(len, 4); + len = mime_decode_from_qp("abc", output, 4); + ASSERT_EQ(len, 4); + ASSERT_EQ(string("abc"), string(output)); + + len = mime_decode_from_qp("a=3Db", NULL, 0); + ASSERT_EQ(len, 4); + len = mime_decode_from_qp("a=3Db", output, 4); + ASSERT_EQ(len, 4); + ASSERT_EQ(string("a=b"), string(output)); + + len = mime_decode_from_qp("Libert=C3=A9", NULL, 0); + ASSERT_EQ(len, 9); + len = mime_decode_from_qp("Libert=C3=A9", output, 9); + ASSERT_EQ(len, 9); + ASSERT_EQ(string("Libert\xc3\xa9"), string(output)); +} + +TEST(MimeTests, LowercaseDecode) { + char output[256]; + memset(output, 0, sizeof(output)); + int len; + + len = mime_decode_from_qp("Libert=c3=a9", NULL, 0); + ASSERT_EQ(len, 9); + len = mime_decode_from_qp("Libert=c3=a9", output, 9); + ASSERT_EQ(len, 9); + ASSERT_EQ(string("Libert\xc3\xa9"), string(output)); +} + +TEST(MimeTests, DecodeOutOfSpace) { + char output[256]; + memset(output, 0, sizeof(output)); + int len; + + len = mime_decode_from_qp("abcdefg", NULL, 0); + ASSERT_EQ(len, 8); + len = mime_decode_from_qp("abcdefg", output, 4); + ASSERT_EQ(len, 8); + ASSERT_EQ(string("abc"), string(output)); + len = mime_decode_from_qp("abcdefg", output, 1); + ASSERT_EQ(len, 8); + ASSERT_EQ(string(""), string(output)); + + len = mime_decode_from_qp("a=3Db", output, 2); + ASSERT_EQ(len, 4); + ASSERT_EQ(string("a"), string(output)); + len = mime_decode_from_qp("a=3Db", output, 3); + ASSERT_EQ(len, 4); + ASSERT_EQ(string("a="), string(output)); +} + +TEST(MimeTests, DecodeErrors) { + char output[128]; + memset(output, 0, sizeof(output)); + int len; + + // incomplete escape sequence + len = mime_decode_from_qp("boo=", output, sizeof(output)); + ASSERT_LT(len, 0); + + // invalid escape sequences + len = mime_decode_from_qp("boo=gg", output, sizeof(output)); + ASSERT_LT(len, 0); + len = mime_decode_from_qp("boo=g", output, sizeof(output)); + ASSERT_LT(len, 0); + len = mime_decode_from_qp("boo==", output, sizeof(output)); + ASSERT_LT(len, 0); + len = mime_decode_from_qp("boo=44bar=z", output, sizeof(output)); + ASSERT_LT(len, 0); + + // high bit should not be set in quoted-printable mime output + unsigned char bad_input2[] = { 0x81, 0x6a, 0x0 }; + len = mime_decode_from_qp(reinterpret_cast(bad_input2), + output, sizeof(output)); + ASSERT_LT(len, 0); +} -- cgit v1.2.3