Converted all C-style casts to C++-style casts + added unit test for utility::md5.
This commit is contained in:
parent
406181ca1f
commit
fc1c6b08d1
@ -2,6 +2,12 @@
|
|||||||
VERSION 0.6.2-cvs
|
VERSION 0.6.2-cvs
|
||||||
=================
|
=================
|
||||||
|
|
||||||
|
2005-01-01 Vincent Richard <vincent@vincent-richard.net>
|
||||||
|
|
||||||
|
* Converted all C-style casts to C++-style casts.
|
||||||
|
|
||||||
|
* Added unit test for utility::md5.
|
||||||
|
|
||||||
2004-12-31 Vincent Richard <vincent@vincent-richard.net>
|
2004-12-31 Vincent Richard <vincent@vincent-richard.net>
|
||||||
|
|
||||||
* Started version 0.6.2.
|
* Started version 0.6.2.
|
||||||
|
@ -305,7 +305,8 @@ libvmimetest_sources = [
|
|||||||
[ 'tests/parser/headerTest', [ 'tests/parser/headerTest.cpp' ] ],
|
[ 'tests/parser/headerTest', [ 'tests/parser/headerTest.cpp' ] ],
|
||||||
[ 'tests/parser/mailboxTest', [ 'tests/parser/mailboxTest.cpp' ] ],
|
[ 'tests/parser/mailboxTest', [ 'tests/parser/mailboxTest.cpp' ] ],
|
||||||
[ 'tests/parser/mediaTypeTest', [ 'tests/parser/mediaTypeTest.cpp' ] ],
|
[ 'tests/parser/mediaTypeTest', [ 'tests/parser/mediaTypeTest.cpp' ] ],
|
||||||
[ 'tests/parser/textTest', [ 'tests/parser/textTest.cpp' ] ]
|
[ 'tests/parser/textTest', [ 'tests/parser/textTest.cpp' ] ],
|
||||||
|
[ 'tests/utility/md5Test', [ 'tests/utility/md5Test.cpp' ] ]
|
||||||
]
|
]
|
||||||
|
|
||||||
libvmime_autotools = [
|
libvmime_autotools = [
|
||||||
@ -505,6 +506,7 @@ env.Append(CXXFLAGS = ['-Wall'])
|
|||||||
env.Append(CXXFLAGS = ['-ansi'])
|
env.Append(CXXFLAGS = ['-ansi'])
|
||||||
env.Append(CXXFLAGS = ['-pedantic'])
|
env.Append(CXXFLAGS = ['-pedantic'])
|
||||||
env.Append(CXXFLAGS = ['-Wpointer-arith'])
|
env.Append(CXXFLAGS = ['-Wpointer-arith'])
|
||||||
|
env.Append(CXXFLAGS = ['-Wold-style-cast'])
|
||||||
|
|
||||||
env.Append(TARFLAGS = ['-c'])
|
env.Append(TARFLAGS = ['-c'])
|
||||||
env.Append(TARFLAGS = ['--bzip2'])
|
env.Append(TARFLAGS = ['--bzip2'])
|
||||||
|
@ -26,17 +26,26 @@
|
|||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#include <iconv.h>
|
|
||||||
|
|
||||||
#ifndef VMIME_BUILDING_DOC
|
#ifndef VMIME_BUILDING_DOC
|
||||||
|
|
||||||
|
#include <iconv.h>
|
||||||
|
|
||||||
// HACK: prototypes may differ depending on the compiler and/or system (the
|
// HACK: prototypes may differ depending on the compiler and/or system (the
|
||||||
// second parameter may or may not be 'const'). This redeclaration is a hack
|
// second parameter may or may not be 'const'). This redeclaration is a hack
|
||||||
// to have a common prototype "iconv_cast".
|
// to have a common prototype "iconv_cast".
|
||||||
typedef size_t (*iconv_const_hack)(iconv_t cd, const char* * inbuf,
|
class ICONV_HACK
|
||||||
size_t *inbytesleft, char* * outbuf, size_t *outbytesleft);
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
#define iconv_const ((iconv_const_hack) iconv)
|
ICONV_HACK(const char** ptr) : m_ptr(ptr) { }
|
||||||
|
|
||||||
|
operator const char**() { return m_ptr; }
|
||||||
|
operator char**() { return const_cast <char**>(m_ptr); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
const char** m_ptr;
|
||||||
|
};
|
||||||
|
|
||||||
#endif // VMIME_BUILDING_DOC
|
#endif // VMIME_BUILDING_DOC
|
||||||
}
|
}
|
||||||
@ -80,13 +89,23 @@ void charset::generate(utility::outputStream& os, const string::size_type /* max
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct X
|
||||||
|
{
|
||||||
|
X(const char**);
|
||||||
|
|
||||||
|
operator const char**() { return x; }
|
||||||
|
operator char**() { return const_cast <char**>(x); }
|
||||||
|
|
||||||
|
const char** x;
|
||||||
|
};
|
||||||
|
|
||||||
void charset::convert(utility::inputStream& in, utility::outputStream& out,
|
void charset::convert(utility::inputStream& in, utility::outputStream& out,
|
||||||
const charset& source, const charset& dest)
|
const charset& source, const charset& dest)
|
||||||
{
|
{
|
||||||
// Get an iconv descriptor
|
// Get an iconv descriptor
|
||||||
const iconv_t cd = iconv_open(dest.getName().c_str(), source.getName().c_str());
|
const iconv_t cd = iconv_open(dest.getName().c_str(), source.getName().c_str());
|
||||||
|
|
||||||
if (cd != (iconv_t) -1)
|
if (cd != reinterpret_cast <iconv_t>(-1))
|
||||||
{
|
{
|
||||||
char inBuffer[5];
|
char inBuffer[5];
|
||||||
char outBuffer[32768];
|
char outBuffer[32768];
|
||||||
@ -97,14 +116,15 @@ void charset::convert(utility::inputStream& in, utility::outputStream& out,
|
|||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
// Fullfill the buffer
|
// Fullfill the buffer
|
||||||
size_t inLength = (size_t) in.read(inBuffer + inPos, sizeof(inBuffer) - inPos) + inPos;
|
size_t inLength = static_cast <size_t>(in.read(inBuffer + inPos, sizeof(inBuffer) - inPos) + inPos);
|
||||||
size_t outLength = sizeof(outBuffer);
|
size_t outLength = sizeof(outBuffer);
|
||||||
|
|
||||||
const char* inPtr = inBuffer;
|
const char* inPtr = inBuffer;
|
||||||
char* outPtr = outBuffer;
|
char* outPtr = outBuffer;
|
||||||
|
|
||||||
// Convert input bytes
|
// Convert input bytes
|
||||||
if (iconv_const(cd, &inPtr, &inLength, &outPtr, &outLength) == (size_t) -1)
|
if (iconv(cd, ICONV_HACK(&inPtr), &inLength,
|
||||||
|
&outPtr, &outLength) == static_cast <size_t>(-1))
|
||||||
{
|
{
|
||||||
// Illegal input sequence or input sequence has no equivalent
|
// Illegal input sequence or input sequence has no equivalent
|
||||||
// sequence in the destination charset.
|
// sequence in the destination charset.
|
||||||
@ -118,7 +138,7 @@ void charset::convert(utility::inputStream& in, utility::outputStream& out,
|
|||||||
out.write("?", 1);
|
out.write("?", 1);
|
||||||
|
|
||||||
// Skip a byte and leave unconverted bytes in the input buffer
|
// Skip a byte and leave unconverted bytes in the input buffer
|
||||||
std::copy((char*) inPtr + 1, inBuffer + sizeof(inBuffer), inBuffer);
|
std::copy(const_cast <char*>(inPtr + 1), inBuffer + sizeof(inBuffer), inBuffer);
|
||||||
inPos = inLength - 1;
|
inPos = inLength - 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -127,7 +147,7 @@ void charset::convert(utility::inputStream& in, utility::outputStream& out,
|
|||||||
out.write(outBuffer, sizeof(outBuffer) - outLength);
|
out.write(outBuffer, sizeof(outBuffer) - outLength);
|
||||||
|
|
||||||
// Leave unconverted bytes in the input buffer
|
// Leave unconverted bytes in the input buffer
|
||||||
std::copy((char*) inPtr, inBuffer + sizeof(inBuffer), inBuffer);
|
std::copy(const_cast <char*>(inPtr), inBuffer + sizeof(inBuffer), inBuffer);
|
||||||
inPos = inLength;
|
inPos = inLength;
|
||||||
|
|
||||||
prevIsInvalid = true;
|
prevIsInvalid = true;
|
||||||
@ -166,13 +186,13 @@ void charset::iconvert(const STRINGF& in, STRINGT& out, const charset& from, con
|
|||||||
typedef typename STRINGF::value_type ivt;
|
typedef typename STRINGF::value_type ivt;
|
||||||
typedef typename STRINGT::value_type ovt;
|
typedef typename STRINGT::value_type ovt;
|
||||||
|
|
||||||
if (cd != (iconv_t) -1)
|
if (cd != reinterpret_cast <iconv_t>(-1))
|
||||||
{
|
{
|
||||||
out.clear();
|
out.clear();
|
||||||
|
|
||||||
char buffer[65536];
|
char buffer[65536];
|
||||||
|
|
||||||
const char* inBuffer = (const char*) in.data();
|
const char* inBuffer = static_cast <const char*>(in.data());
|
||||||
size_t inBytesLeft = in.length();
|
size_t inBytesLeft = in.length();
|
||||||
|
|
||||||
for ( ; inBytesLeft > 0 ; )
|
for ( ; inBytesLeft > 0 ; )
|
||||||
@ -180,10 +200,10 @@ void charset::iconvert(const STRINGF& in, STRINGT& out, const charset& from, con
|
|||||||
size_t outBytesLeft = sizeof(buffer);
|
size_t outBytesLeft = sizeof(buffer);
|
||||||
char* outBuffer = buffer;
|
char* outBuffer = buffer;
|
||||||
|
|
||||||
if (iconv_const(cd, &inBuffer, &inBytesLeft,
|
if (iconv(cd, ICONV_HACK(&inBuffer), &inBytesLeft,
|
||||||
&outBuffer, &outBytesLeft) == (size_t) -1)
|
&outBuffer, &outBytesLeft) == static_cast <size_t>(-1))
|
||||||
{
|
{
|
||||||
out += STRINGT((ovt*) buffer, sizeof(buffer) - outBytesLeft);
|
out += STRINGT(static_cast <ovt*>(buffer), sizeof(buffer) - outBytesLeft);
|
||||||
|
|
||||||
// Ignore this "blocking" character and continue
|
// Ignore this "blocking" character and continue
|
||||||
out += '?';
|
out += '?';
|
||||||
@ -192,7 +212,7 @@ void charset::iconvert(const STRINGF& in, STRINGT& out, const charset& from, con
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
out += STRINGT((ovt*) buffer, sizeof(buffer) - outBytesLeft);
|
out += STRINGT(static_cast <ovt*>(buffer), sizeof(buffer) - outBytesLeft);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -64,6 +64,10 @@ const unsigned char encoderB64::sm_decodeMap[256] =
|
|||||||
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, // 0xf0 - 0xff
|
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, // 0xf0 - 0xff
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifndef VMIME_BUILDING_DOC
|
||||||
|
#define B64_WRITE(s, x, l) s.write(reinterpret_cast <utility::stream::value_type*>(x), l)
|
||||||
|
#endif // VMIME_BUILDING_DOC
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const utility::stream::size_type encoderB64::encode(utility::inputStream& in, utility::outputStream& out)
|
const utility::stream::size_type encoderB64::encode(utility::inputStream& in, utility::outputStream& out)
|
||||||
@ -150,7 +154,7 @@ const utility::stream::size_type encoderB64::encode(utility::inputStream& in, ut
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Write encoded data to output stream
|
// Write encoded data to output stream
|
||||||
out.write((char*) output, 4);
|
B64_WRITE(out, output, 4);
|
||||||
|
|
||||||
total += 4;
|
total += 4;
|
||||||
curCol += 4;
|
curCol += 4;
|
||||||
@ -230,31 +234,31 @@ const utility::stream::size_type encoderB64::decode(utility::inputStream& in, ut
|
|||||||
if (c1 == '=' || c2 == '=') // end
|
if (c1 == '=' || c2 == '=') // end
|
||||||
break;
|
break;
|
||||||
|
|
||||||
output[0] = (unsigned char)((sm_decodeMap[c1] << 2) | ((sm_decodeMap[c2] & 0x30) >> 4));
|
output[0] = static_cast <unsigned char>((sm_decodeMap[c1] << 2) | ((sm_decodeMap[c2] & 0x30) >> 4));
|
||||||
|
|
||||||
c1 = bytes[2];
|
c1 = bytes[2];
|
||||||
|
|
||||||
if (c1 == '=') // end
|
if (c1 == '=') // end
|
||||||
{
|
{
|
||||||
out.write((char*) output, 1);
|
B64_WRITE(out, output, 1);
|
||||||
total += 1;
|
total += 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
output[1] = (unsigned char)(((sm_decodeMap[c2] & 0xf) << 4) | ((sm_decodeMap[c1] & 0x3c) >> 2));
|
output[1] = static_cast <unsigned char>(((sm_decodeMap[c2] & 0xf) << 4) | ((sm_decodeMap[c1] & 0x3c) >> 2));
|
||||||
|
|
||||||
c2 = bytes[3];
|
c2 = bytes[3];
|
||||||
|
|
||||||
if (c2 == '=') // end
|
if (c2 == '=') // end
|
||||||
{
|
{
|
||||||
out.write((char*) output, 2);
|
B64_WRITE(out, output, 2);
|
||||||
total += 2;
|
total += 2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
output[2] = (unsigned char)(((sm_decodeMap[c1] & 0x03) << 6) | sm_decodeMap[c2]);
|
output[2] = static_cast <unsigned char>(((sm_decodeMap[c1] & 0x03) << 6) | sm_decodeMap[c2]);
|
||||||
|
|
||||||
out.write((char*) output, 3);
|
B64_WRITE(out, output, 3);
|
||||||
total += 3;
|
total += 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,6 +80,8 @@ const unsigned char encoderQP::sm_hexDecodeTable[256] =
|
|||||||
outBufferPos += 3; \
|
outBufferPos += 3; \
|
||||||
curCol += 3;
|
curCol += 3;
|
||||||
|
|
||||||
|
#define QP_WRITE(s, x, l) s.write(reinterpret_cast <utility::stream::value_type*>(x), l)
|
||||||
|
|
||||||
#endif // VMIME_BUILDING_DOC
|
#endif // VMIME_BUILDING_DOC
|
||||||
|
|
||||||
|
|
||||||
@ -88,13 +90,13 @@ const utility::stream::size_type encoderQP::encode(utility::inputStream& in, uti
|
|||||||
in.reset(); // may not work...
|
in.reset(); // may not work...
|
||||||
|
|
||||||
const string::size_type propMaxLineLength =
|
const string::size_type propMaxLineLength =
|
||||||
getProperties().getProperty <string::size_type>("maxlinelength", (string::size_type) -1);
|
getProperties().getProperty <string::size_type>("maxlinelength", static_cast <string::size_type>(-1));
|
||||||
|
|
||||||
const bool rfc2047 = getProperties().getProperty <bool>("rfc2047", false);
|
const bool rfc2047 = getProperties().getProperty <bool>("rfc2047", false);
|
||||||
const bool text = getProperties().getProperty <bool>("text", false); // binary mode by default
|
const bool text = getProperties().getProperty <bool>("text", false); // binary mode by default
|
||||||
|
|
||||||
const bool cutLines = (propMaxLineLength != (string::size_type) -1);
|
const bool cutLines = (propMaxLineLength != static_cast <string::size_type>(-1));
|
||||||
const string::size_type maxLineLength = std::min(propMaxLineLength, (string::size_type) 74);
|
const string::size_type maxLineLength = std::min(propMaxLineLength, static_cast <string::size_type>(74));
|
||||||
|
|
||||||
// Process the data
|
// Process the data
|
||||||
char buffer[16384];
|
char buffer[16384];
|
||||||
@ -111,9 +113,9 @@ const utility::stream::size_type encoderQP::encode(utility::inputStream& in, uti
|
|||||||
while (bufferPos < bufferLength || !in.eof())
|
while (bufferPos < bufferLength || !in.eof())
|
||||||
{
|
{
|
||||||
// Flush current output buffer
|
// Flush current output buffer
|
||||||
if (outBufferPos + 6 >= (int) sizeof(outBuffer))
|
if (outBufferPos + 6 >= static_cast <int>(sizeof(outBuffer)))
|
||||||
{
|
{
|
||||||
out.write((char*) outBuffer, outBufferPos);
|
QP_WRITE(out, outBuffer, outBufferPos);
|
||||||
|
|
||||||
total += outBufferPos;
|
total += outBufferPos;
|
||||||
outBufferPos = 0;
|
outBufferPos = 0;
|
||||||
@ -131,7 +133,7 @@ const utility::stream::size_type encoderQP::encode(utility::inputStream& in, uti
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get the next char and encode it
|
// Get the next char and encode it
|
||||||
const unsigned char c = (unsigned char) buffer[bufferPos++];
|
const unsigned char c = static_cast <unsigned char>(buffer[bufferPos++]);
|
||||||
|
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
@ -270,7 +272,7 @@ const utility::stream::size_type encoderQP::encode(utility::inputStream& in, uti
|
|||||||
// Flush remaining output buffer
|
// Flush remaining output buffer
|
||||||
if (outBufferPos != 0)
|
if (outBufferPos != 0)
|
||||||
{
|
{
|
||||||
out.write((char*) outBuffer, outBufferPos);
|
QP_WRITE(out, outBuffer, outBufferPos);
|
||||||
total += outBufferPos;
|
total += outBufferPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -297,9 +299,9 @@ const utility::stream::size_type encoderQP::decode(utility::inputStream& in, uti
|
|||||||
while (bufferPos < bufferLength || !in.eof())
|
while (bufferPos < bufferLength || !in.eof())
|
||||||
{
|
{
|
||||||
// Flush current output buffer
|
// Flush current output buffer
|
||||||
if (outBufferPos >= (int) sizeof(outBuffer))
|
if (outBufferPos >= static_cast <int>(sizeof(outBuffer)))
|
||||||
{
|
{
|
||||||
out.write((char*) outBuffer, outBufferPos);
|
QP_WRITE(out, outBuffer, outBufferPos);
|
||||||
|
|
||||||
total += outBufferPos;
|
total += outBufferPos;
|
||||||
outBufferPos = 0;
|
outBufferPos = 0;
|
||||||
@ -317,7 +319,7 @@ const utility::stream::size_type encoderQP::decode(utility::inputStream& in, uti
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Decode the next sequence (hex-encoded byte or printable character)
|
// Decode the next sequence (hex-encoded byte or printable character)
|
||||||
unsigned char c = (unsigned char) buffer[bufferPos++];
|
unsigned char c = static_cast <unsigned char>(buffer[bufferPos++]);
|
||||||
|
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
@ -331,7 +333,7 @@ const utility::stream::size_type encoderQP::decode(utility::inputStream& in, uti
|
|||||||
|
|
||||||
if (bufferPos < bufferLength)
|
if (bufferPos < bufferLength)
|
||||||
{
|
{
|
||||||
c = (unsigned char) buffer[bufferPos++];
|
c = static_cast <unsigned char>(buffer[bufferPos++]);
|
||||||
|
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
@ -366,7 +368,7 @@ const utility::stream::size_type encoderQP::decode(utility::inputStream& in, uti
|
|||||||
|
|
||||||
if (bufferPos < bufferLength)
|
if (bufferPos < bufferLength)
|
||||||
{
|
{
|
||||||
const unsigned char next = (unsigned char) buffer[bufferPos++];
|
const unsigned char next = static_cast <unsigned char>(buffer[bufferPos++]);
|
||||||
|
|
||||||
const unsigned char value =
|
const unsigned char value =
|
||||||
sm_hexDecodeTable[c] * 16
|
sm_hexDecodeTable[c] * 16
|
||||||
@ -415,7 +417,7 @@ const utility::stream::size_type encoderQP::decode(utility::inputStream& in, uti
|
|||||||
// Flush remaining output buffer
|
// Flush remaining output buffer
|
||||||
if (outBufferPos != 0)
|
if (outBufferPos != 0)
|
||||||
{
|
{
|
||||||
out.write((char*) outBuffer, outBufferPos);
|
QP_WRITE(out, outBuffer, outBufferPos);
|
||||||
total += outBufferPos;
|
total += outBufferPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,9 +101,9 @@ const utility::stream::size_type encoderUUE::encode(utility::inputStream& in, ut
|
|||||||
|
|
||||||
for (utility::stream::size_type i = 0 ; i < inLength ; i += 3, j += 4)
|
for (utility::stream::size_type i = 0 ; i < inLength ; i += 3, j += 4)
|
||||||
{
|
{
|
||||||
const unsigned char c1 = (unsigned char) inBuffer[i];
|
const unsigned char c1 = static_cast <unsigned char>(inBuffer[i]);
|
||||||
const unsigned char c2 = (unsigned char) inBuffer[i + 1];
|
const unsigned char c2 = static_cast <unsigned char>(inBuffer[i + 1]);
|
||||||
const unsigned char c3 = (unsigned char) inBuffer[i + 2];
|
const unsigned char c3 = static_cast <unsigned char>(inBuffer[i + 2]);
|
||||||
|
|
||||||
outBuffer[j] = UUENCODE(c1 >> 2);
|
outBuffer[j] = UUENCODE(c1 >> 2);
|
||||||
outBuffer[j + 1] = UUENCODE((c1 << 4) & 060 | (c2 >> 4) & 017);
|
outBuffer[j + 1] = UUENCODE((c1 << 4) & 060 | (c2 >> 4) & 017);
|
||||||
@ -149,7 +149,8 @@ const utility::stream::size_type encoderUUE::decode(utility::inputStream& in, ut
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
const utility::stream::size_type outLength = UUDECODE(lengthChar);
|
const utility::stream::size_type outLength = UUDECODE(lengthChar);
|
||||||
const utility::stream::size_type inLength = std::min((outLength * 4) / 3, (utility::stream::size_type) 64);
|
const utility::stream::size_type inLength =
|
||||||
|
std::min((outLength * 4) / 3, static_cast <utility::stream::size_type>(64));
|
||||||
utility::stream::value_type inPos = 0;
|
utility::stream::value_type inPos = 0;
|
||||||
|
|
||||||
switch (lengthChar)
|
switch (lengthChar)
|
||||||
@ -257,10 +258,10 @@ const utility::stream::size_type encoderUUE::decode(utility::inputStream& in, ut
|
|||||||
// Decode data
|
// Decode data
|
||||||
for (utility::stream::size_type i = 0, j = 0 ; i < inLength ; i += 4, j += 3)
|
for (utility::stream::size_type i = 0, j = 0 ; i < inLength ; i += 4, j += 3)
|
||||||
{
|
{
|
||||||
const unsigned char c1 = (unsigned char) inBuffer[i];
|
const unsigned char c1 = static_cast <unsigned char>(inBuffer[i]);
|
||||||
const unsigned char c2 = (unsigned char) inBuffer[i + 1];
|
const unsigned char c2 = static_cast <unsigned char>(inBuffer[i + 1]);
|
||||||
const unsigned char c3 = (unsigned char) inBuffer[i + 2];
|
const unsigned char c3 = static_cast <unsigned char>(inBuffer[i + 2]);
|
||||||
const unsigned char c4 = (unsigned char) inBuffer[i + 3];
|
const unsigned char c4 = static_cast <unsigned char>(inBuffer[i + 3]);
|
||||||
|
|
||||||
const utility::stream::size_type n =
|
const utility::stream::size_type n =
|
||||||
std::min(inLength - i, static_cast <utility::stream::size_type>(3));
|
std::min(inLength - i, static_cast <utility::stream::size_type>(3));
|
||||||
|
@ -218,7 +218,7 @@ void IMAPConnection::send(bool tag, const string& what, bool end)
|
|||||||
{
|
{
|
||||||
++(*m_tag);
|
++(*m_tag);
|
||||||
|
|
||||||
oss << (string) *m_tag;
|
oss << string(*m_tag);
|
||||||
oss << " ";
|
oss << " ";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,7 +152,7 @@ const string IMAPUtils::toModifiedUTF7
|
|||||||
const char base64alphabet[] =
|
const char base64alphabet[] =
|
||||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,=";
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,=";
|
||||||
|
|
||||||
const unsigned int hs = (unsigned int)(unsigned char) hierarchySeparator;
|
const unsigned int hs = static_cast <unsigned int>(static_cast <unsigned char>(hierarchySeparator));
|
||||||
|
|
||||||
string hsUTF7;
|
string hsUTF7;
|
||||||
hsUTF7.resize(3);
|
hsUTF7.resize(3);
|
||||||
|
@ -46,7 +46,7 @@ void hmac_md5(const string& text, const string& key, string& hexDigest)
|
|||||||
if (key.length() > 64)
|
if (key.length() > 64)
|
||||||
{
|
{
|
||||||
utility::md5 keyMD5;
|
utility::md5 keyMD5;
|
||||||
keyMD5.update((vmime_uint8*) key.data(), key.length());
|
keyMD5.update(reinterpret_cast <const vmime_uint8*>(key.data()), key.length());
|
||||||
|
|
||||||
std::copy(keyMD5.hash(), keyMD5.hash() + 16, tkey);
|
std::copy(keyMD5.hash(), keyMD5.hash() + 16, tkey);
|
||||||
tkeyLen = 16;
|
tkeyLen = 16;
|
||||||
|
@ -70,12 +70,12 @@ void posixSocket::connect(const vmime::string& address, const vmime::port_t port
|
|||||||
memset(&addr, 0, sizeof(addr));
|
memset(&addr, 0, sizeof(addr));
|
||||||
|
|
||||||
addr.sin_family = AF_INET;
|
addr.sin_family = AF_INET;
|
||||||
addr.sin_port = htons((unsigned short) port);
|
addr.sin_port = htons(static_cast <unsigned short>(port));
|
||||||
addr.sin_addr.s_addr = ::inet_addr(address.c_str());
|
addr.sin_addr.s_addr = ::inet_addr(address.c_str());
|
||||||
|
|
||||||
if (addr.sin_addr.s_addr == (::in_addr_t) -1)
|
if (addr.sin_addr.s_addr == static_cast <in_addr_t>(-1))
|
||||||
{
|
{
|
||||||
::hostent* hostInfo = (hostent*) ::gethostbyname(address.c_str());
|
::hostent* hostInfo = ::gethostbyname(address.c_str());
|
||||||
|
|
||||||
if (hostInfo == NULL)
|
if (hostInfo == NULL)
|
||||||
{
|
{
|
||||||
@ -83,7 +83,7 @@ void posixSocket::connect(const vmime::string& address, const vmime::port_t port
|
|||||||
throw vmime::exceptions::connection_error();
|
throw vmime::exceptions::connection_error();
|
||||||
}
|
}
|
||||||
|
|
||||||
bcopy(hostInfo->h_addr, (char*) &addr.sin_addr, hostInfo->h_length);
|
bcopy(hostInfo->h_addr, reinterpret_cast <char*>(&addr.sin_addr), hostInfo->h_length);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -98,7 +98,7 @@ void posixSocket::connect(const vmime::string& address, const vmime::port_t port
|
|||||||
throw vmime::exceptions::connection_error();
|
throw vmime::exceptions::connection_error();
|
||||||
|
|
||||||
// Start connection
|
// Start connection
|
||||||
if (::connect(m_desc, (sockaddr*) &addr, sizeof(addr)) == -1)
|
if (::connect(m_desc, reinterpret_cast <sockaddr*>(&addr), sizeof(addr)) == -1)
|
||||||
{
|
{
|
||||||
::close(m_desc);
|
::close(m_desc);
|
||||||
m_desc = -1;
|
m_desc = -1;
|
||||||
|
@ -490,7 +490,7 @@ void text::encodeAndFold(utility::outputStream& os, const string::size_type maxL
|
|||||||
const string::size_type maxLineLength3 =
|
const string::size_type maxLineLength3 =
|
||||||
(maxLineLength == lineLengthLimits::infinite)
|
(maxLineLength == lineLengthLimits::infinite)
|
||||||
? maxLineLength
|
? maxLineLength
|
||||||
: std::min(maxLineLength, (const string::size_type) 76);
|
: std::min(maxLineLength, static_cast <string::size_type>(76));
|
||||||
|
|
||||||
// Base64 if more than 60% non-ascii, quoted-printable else (default)
|
// Base64 if more than 60% non-ascii, quoted-printable else (default)
|
||||||
const string::size_type asciiPercent = (100 * asciiCount) / buffer.length();
|
const string::size_type asciiPercent = (100 * asciiCount) / buffer.length();
|
||||||
@ -534,9 +534,10 @@ void text::encodeAndFold(utility::outputStream& os, const string::size_type maxL
|
|||||||
string::const_iterator pos = buffer.begin();
|
string::const_iterator pos = buffer.begin();
|
||||||
string::size_type remaining = buffer.length();
|
string::size_type remaining = buffer.length();
|
||||||
|
|
||||||
encoder* theEncoder = ((encoding == 'B')
|
encoder* theEncoder;
|
||||||
? ((encoder*) new encoderB64)
|
|
||||||
: ((encoder*) new encoderQP));
|
if (encoding == 'B') theEncoder == new encoderB64;
|
||||||
|
else theEncoder = new encoderQP;
|
||||||
|
|
||||||
string qpEncodedBuffer;
|
string qpEncodedBuffer;
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ md5::md5(const string& in)
|
|||||||
: m_finalized(false)
|
: m_finalized(false)
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
update((vmime_uint8*) in.c_str(), in.length());
|
update(reinterpret_cast <const vmime_uint8*>(in.c_str()), in.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -102,7 +102,7 @@ static void copyUint8Array(vmime_uint8* dest, const vmime_uint8* src, unsigned l
|
|||||||
|
|
||||||
void md5::update(const string& in)
|
void md5::update(const string& in)
|
||||||
{
|
{
|
||||||
update((vmime_uint8*) in.c_str(), in.length());
|
update(reinterpret_cast <const vmime_uint8*>(in.c_str()), in.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -159,8 +159,8 @@ void md5::finalize()
|
|||||||
|
|
||||||
memset(p, 0, padding);
|
memset(p, 0, padding);
|
||||||
|
|
||||||
((vmime_uint32*) m_block)[14] = (m_byteCount << 3);
|
reinterpret_cast <vmime_uint32*>(m_block)[14] = (m_byteCount << 3);
|
||||||
((vmime_uint32*) m_block)[15] = (m_byteCount >> 29);
|
reinterpret_cast <vmime_uint32*>(m_block)[15] = (m_byteCount >> 29);
|
||||||
|
|
||||||
#if VMIME_BYTE_ORDER_BIG_ENDIAN
|
#if VMIME_BYTE_ORDER_BIG_ENDIAN
|
||||||
swapUint32Array((vmime_uint32*) m_block, (64 - 8) / 4);
|
swapUint32Array((vmime_uint32*) m_block, (64 - 8) / 4);
|
||||||
@ -208,7 +208,7 @@ void md5::transformHelper()
|
|||||||
|
|
||||||
void md5::transform()
|
void md5::transform()
|
||||||
{
|
{
|
||||||
const vmime_uint32* const in = (vmime_uint32*) m_block;
|
const vmime_uint32* const in = reinterpret_cast <vmime_uint32*>(m_block);
|
||||||
|
|
||||||
vmime_uint32 a = m_hash[0];
|
vmime_uint32 a = m_hash[0];
|
||||||
vmime_uint32 b = m_hash[1];
|
vmime_uint32 b = m_hash[1];
|
||||||
@ -306,7 +306,7 @@ const string md5::hex()
|
|||||||
static const unsigned char hex[] = "0123456789abcdef";
|
static const unsigned char hex[] = "0123456789abcdef";
|
||||||
|
|
||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
const vmime_uint8* const digest = (vmime_uint8*) m_hash;
|
const vmime_uint8* const digest = reinterpret_cast <vmime_uint8*>(m_hash);
|
||||||
|
|
||||||
for (int i = 0 ; i < 16 ; ++i)
|
for (int i = 0 ; i < 16 ; ++i)
|
||||||
{
|
{
|
||||||
@ -323,7 +323,7 @@ const vmime_uint8* md5::hash()
|
|||||||
if (!m_finalized)
|
if (!m_finalized)
|
||||||
finalize();
|
finalize();
|
||||||
|
|
||||||
return ((vmime_uint8*) m_hash);
|
return (reinterpret_cast <const vmime_uint8*>(m_hash));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ const bool stringUtils::isStringEqualNoCase
|
|||||||
(const string::const_iterator begin, const string::const_iterator end,
|
(const string::const_iterator begin, const string::const_iterator end,
|
||||||
const char* s, const string::size_type n)
|
const char* s, const string::size_type n)
|
||||||
{
|
{
|
||||||
if ((string::size_type)(end - begin) < n)
|
if (static_cast <string::size_type>(end - begin) < n)
|
||||||
return (false);
|
return (false);
|
||||||
|
|
||||||
bool equal = true;
|
bool equal = true;
|
||||||
|
112
tests/utility/md5Test.cpp
Normal file
112
tests/utility/md5Test.cpp
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
//
|
||||||
|
// VMime library (http://vmime.sourceforge.net)
|
||||||
|
// Copyright (C) 2002-2004 Vincent Richard <vincent@vincent-richard.net>
|
||||||
|
//
|
||||||
|
// This program is free software; you can redistribute it and/or
|
||||||
|
// modify it under the terms of the GNU General Public License as
|
||||||
|
// published by the Free Software Foundation; either version 2 of
|
||||||
|
// the License, or (at your option) any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
// General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program; if not, write to the Free Software
|
||||||
|
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "../lib/unit++/unit++.h"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <ostream>
|
||||||
|
|
||||||
|
#include "vmime/vmime.hpp"
|
||||||
|
#include "vmime/platforms/posix/posixHandler.hpp"
|
||||||
|
#include "vmime/utility/md5.hpp"
|
||||||
|
|
||||||
|
using namespace unitpp;
|
||||||
|
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
class md5Test : public suite
|
||||||
|
{
|
||||||
|
void testString()
|
||||||
|
{
|
||||||
|
// Test suites from RFC #1321
|
||||||
|
assert_eq("1", "d41d8cd98f00b204e9800998ecf8427e", vmime::utility::md5("").hex());
|
||||||
|
assert_eq("2", "0cc175b9c0f1b6a831c399e269772661", vmime::utility::md5("a").hex());
|
||||||
|
assert_eq("3", "900150983cd24fb0d6963f7d28e17f72", vmime::utility::md5("abc").hex());
|
||||||
|
assert_eq("4", "f96b697d7cb7938d525a2f31aaf161d0", vmime::utility::md5("message digest").hex());
|
||||||
|
assert_eq("5", "c3fcd3d76192e4007dfb496cca67e13b", vmime::utility::md5("abcdefghijklmnopqrstuvwxyz").hex());
|
||||||
|
assert_eq("6", "d174ab98d277d9f5a5611c2c9f419d9f", vmime::utility::md5("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789").hex());
|
||||||
|
assert_eq("7", "57edf4a22be3c955ac49da2e2107b67a", vmime::utility::md5("12345678901234567890123456789012345678901234567890123456789012345678901234567890").hex());
|
||||||
|
}
|
||||||
|
|
||||||
|
void testUpdate()
|
||||||
|
{
|
||||||
|
vmime::utility::md5 m1;
|
||||||
|
m1.update("");
|
||||||
|
assert_eq("1", "d41d8cd98f00b204e9800998ecf8427e", m1.hex());
|
||||||
|
|
||||||
|
vmime::utility::md5 m2;
|
||||||
|
m2.update("a");
|
||||||
|
m2.update("");
|
||||||
|
assert_eq("2", "0cc175b9c0f1b6a831c399e269772661", m2.hex());
|
||||||
|
|
||||||
|
vmime::utility::md5 m3;
|
||||||
|
m3.update("ab");
|
||||||
|
m3.update("c");
|
||||||
|
assert_eq("3", "900150983cd24fb0d6963f7d28e17f72", m3.hex());
|
||||||
|
|
||||||
|
vmime::utility::md5 m4;
|
||||||
|
m4.update("");
|
||||||
|
m4.update("message");
|
||||||
|
m4.update(" ");
|
||||||
|
m4.update("digest");
|
||||||
|
assert_eq("4", "f96b697d7cb7938d525a2f31aaf161d0", m4.hex());
|
||||||
|
|
||||||
|
vmime::utility::md5 m5;
|
||||||
|
m5.update("abcd");
|
||||||
|
m5.update("");
|
||||||
|
m5.update("efghijklmnop");
|
||||||
|
m5.update("qrstuvwx");
|
||||||
|
m5.update("yz");
|
||||||
|
assert_eq("5", "c3fcd3d76192e4007dfb496cca67e13b", m5.hex());
|
||||||
|
|
||||||
|
vmime::utility::md5 m6;
|
||||||
|
m6.update("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012");
|
||||||
|
m6.update("345");
|
||||||
|
m6.update("6");
|
||||||
|
m6.update("7");
|
||||||
|
m6.update("89");
|
||||||
|
assert_eq("6", "d174ab98d277d9f5a5611c2c9f419d9f", m6.hex());
|
||||||
|
|
||||||
|
vmime::utility::md5 m7;
|
||||||
|
m7.update("12345678901234567890123456789");
|
||||||
|
m7.update("01234567890123456789012345678901");
|
||||||
|
m7.update("234567890123456789");
|
||||||
|
m7.update("");
|
||||||
|
m7.update("0");
|
||||||
|
assert_eq("7", "57edf4a22be3c955ac49da2e2107b67a", m7.hex());
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
md5Test() : suite("vmime::utility::md5")
|
||||||
|
{
|
||||||
|
// VMime initialization
|
||||||
|
vmime::platformDependant::setHandler<vmime::platforms::posix::posixHandler>();
|
||||||
|
|
||||||
|
add("String", testcase(this, "String", &md5Test::testString));
|
||||||
|
add("Update", testcase(this, "Update", &md5Test::testUpdate));
|
||||||
|
|
||||||
|
suite::main().add("vmime::utility::md5", this);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
md5Test* theTest = new md5Test();
|
||||||
|
}
|
@ -382,7 +382,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tagString == (string) *(parser.tag()))
|
if (tagString == string(*(parser.tag())))
|
||||||
{
|
{
|
||||||
*currentPos = pos;
|
*currentPos = pos;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user