mirror of
https://github.com/notepad-plus-plus/notepad-plus-plus.git
synced 2025-07-28 08:14:18 +02:00
Fix geneation of MD5 on Unicode bug
"Geneate MD5 fom text dialog" has geneated wrong result on non ANSI character (Unicode text). This bug is due to wong input data. Fixes #2743
This commit is contained in:
parent
cad87a0124
commit
e838758e9b
@ -124,11 +124,13 @@ void MD5FromTextDlg::generateMD5()
|
|||||||
int len = static_cast<int>(::SendMessage(::GetDlgItem(_hSelf, IDC_MD5_TEXT_EDIT), WM_GETTEXTLENGTH, 0, 0));
|
int len = static_cast<int>(::SendMessage(::GetDlgItem(_hSelf, IDC_MD5_TEXT_EDIT), WM_GETTEXTLENGTH, 0, 0));
|
||||||
if (len)
|
if (len)
|
||||||
{
|
{
|
||||||
char *text = new char[len + 1];
|
wchar_t *text = new wchar_t[len + 1];
|
||||||
::GetDlgItemTextA(_hSelf, IDC_MD5_TEXT_EDIT, text, len + 1);
|
::GetDlgItemText(_hSelf, IDC_MD5_TEXT_EDIT, text, len + 1);
|
||||||
|
WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance();
|
||||||
|
const char *newText = wmc->wchar2char(text, SC_CP_UTF8);
|
||||||
|
|
||||||
MD5 md5;
|
MD5 md5;
|
||||||
char* md5Result = md5.digestString(text);
|
char* md5Result = md5.digestString(newText);
|
||||||
::SetDlgItemTextA(_hSelf, IDC_MD5_RESULT_FOMTEXT_EDIT, md5Result);
|
::SetDlgItemTextA(_hSelf, IDC_MD5_RESULT_FOMTEXT_EDIT, md5Result);
|
||||||
|
|
||||||
delete[] text;
|
delete[] text;
|
||||||
@ -144,13 +146,14 @@ void MD5FromTextDlg::generateMD5PerLine()
|
|||||||
int len = static_cast<int>(::SendMessage(::GetDlgItem(_hSelf, IDC_MD5_TEXT_EDIT), WM_GETTEXTLENGTH, 0, 0));
|
int len = static_cast<int>(::SendMessage(::GetDlgItem(_hSelf, IDC_MD5_TEXT_EDIT), WM_GETTEXTLENGTH, 0, 0));
|
||||||
if (len)
|
if (len)
|
||||||
{
|
{
|
||||||
char *text = new char[len + 1];
|
wchar_t *text = new wchar_t[len + 1];
|
||||||
::GetDlgItemTextA(_hSelf, IDC_MD5_TEXT_EDIT, text, len + 1);
|
::GetDlgItemText(_hSelf, IDC_MD5_TEXT_EDIT, text, len + 1);
|
||||||
|
|
||||||
std::stringstream ss(text);
|
std::wstringstream ss(text);
|
||||||
std::string aLine;
|
std::wstring aLine;
|
||||||
std::string result;
|
std::string result;
|
||||||
MD5 md5;
|
MD5 md5;
|
||||||
|
WcharMbcsConvertor *wmc = WcharMbcsConvertor::getInstance();
|
||||||
while (std::getline(ss, aLine))
|
while (std::getline(ss, aLine))
|
||||||
{
|
{
|
||||||
// getline() detect only '\n' but not "\r\n" under windows
|
// getline() detect only '\n' but not "\r\n" under windows
|
||||||
@ -162,7 +165,8 @@ void MD5FromTextDlg::generateMD5PerLine()
|
|||||||
result += "\r\n";
|
result += "\r\n";
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char* md5Result = md5.digestString(const_cast<char *>(aLine.c_str()));
|
const char *newText = wmc->wchar2char(aLine.c_str(), SC_CP_UTF8);
|
||||||
|
char* md5Result = md5.digestString(newText);
|
||||||
result += md5Result;
|
result += md5Result;
|
||||||
result += "\r\n";
|
result += "\r\n";
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user