summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--messages.cpp18
-rw-r--r--utilities.cpp35
2 files changed, 46 insertions, 7 deletions
diff --git a/messages.cpp b/messages.cpp
index 8df3a2b..5c6036d 100644
--- a/messages.cpp
+++ b/messages.cpp
@@ -41,6 +41,12 @@ int RecvMsgSvc(WPARAM w, LPARAM l)
{ //check for gpg related data
wstring str = toUTF16(msg);
+ if(str.empty())
+ {
+ TCHAR *tmp = mir_a2t(msg);
+ str += tmp;
+ mir_free(tmp);
+ }
wstring::size_type s1 = wstring::npos, s2 = wstring::npos;
if((str.find(_T("-----END PGP PUBLIC KEY BLOCK-----")) != wstring::npos) && (str.find(_T("-----BEGIN PGP PUBLIC KEY BLOCK-----")) != wstring::npos))
@@ -353,6 +359,12 @@ int RecvMsgSvc(WPARAM w, LPARAM l)
return 1;
}
wstring str = toUTF16(msg);
+ if(str.empty())
+ {
+ TCHAR *tmp = mir_a2t(msg);
+ str += tmp;
+ mir_free(tmp);
+ }
mir_free((void**)pre->szMessage);
pre->szMessage = mir_strdup(toUTF8(str).c_str());
return CallService(MS_PROTO_CHAINRECV, w, (LPARAM)ccs);
@@ -393,6 +405,12 @@ int SendMsgSvc(WPARAM w, LPARAM l)
{ //encrypt data here
wstring str = toUTF16(msg);
+ if(str.empty())
+ {
+ TCHAR *tmp = mir_a2t(msg);
+ str += tmp;
+ mir_free(tmp);
+ }
{ //not xmpp, just replace whole message
string out;
DWORD code;
diff --git a/utilities.cpp b/utilities.cpp
index 02ff474..5bba190 100644
--- a/utilities.cpp
+++ b/utilities.cpp
@@ -289,10 +289,22 @@ int onProtoAck(WPARAM w, LPARAM l)
break;
case ACKRESULT_SUCCESS:
{
+ if(sizeof(*f) != sizeof(PROTOFILETRANSFERSTATUS))
+ break;
+ TCHAR *filename = NULL;
+ if(f->szCurrentFile)
+ filename = mir_utf8decodeW(f->szCurrentFile);
+ else if(f->tszCurrentFile)
+ filename = mir_wstrdup(f->tszCurrentFile);
+ if(!filename)
+ break;
TCHAR *temp = _wgetenv(_T("TEMP"));
- if(f->tszCurrentFile && _tcsstr(f->tszCurrentFile, temp))
+ if(_tcsstr(filename, temp))
+ {
+ mir_free(filename);
break;
- else if(f->tszCurrentFile && _tcsstr(f->tszCurrentFile, _T(".gpg"))) //decrypt it
+ }
+ else if(_tcsstr(filename, _T(".gpg"))) //decrypt it
{ //process encrypted file
if(_waccess(f->tszCurrentFile, 0) == -1)
{
@@ -303,7 +315,7 @@ int onProtoAck(WPARAM w, LPARAM l)
DWORD code;
pxResult result;
wstring cmd = _T("-o ");
- wstring file = f->tszCurrentFile;
+ wstring file = filename;
wstring::size_type p1 = file.find(_T(".gpg"));
file.erase(p1, _tcslen(_T(".gpg")));
if(_waccess(file.c_str(), 0) != -1)
@@ -316,7 +328,7 @@ int onProtoAck(WPARAM w, LPARAM l)
file.insert(file.length(), _T("\" "));
cmd += file;
cmd += _T(" -d \"");
- cmd += f->tszCurrentFile;
+ cmd += filename;
cmd += _T("\"");
gpg_execution_params params;
params.cmd = &cmd;
@@ -334,7 +346,8 @@ int onProtoAck(WPARAM w, LPARAM l)
{
MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK);
}
- DeleteFile(f->tszCurrentFile);
+ DeleteFile(filename);
+ mir_free(filename);
}
}
break;
@@ -918,9 +931,17 @@ string toUTF8(wstring str)
return ustr;
}
-wstring toUTF16(string str)
+wstring toUTF16(string str) //convert as much as possible
{
+ string::iterator end_it = utf8::find_invalid(str.begin(), str.end());
+ int length = utf8::distance(str.begin(), end_it);
wstring ustr;
- utf8::utf8to16(str.begin(), str.end(), back_inserter(ustr));
+ utf8::utf8to16(str.begin(), end_it, back_inserter(ustr));
+ string tmp;
+ while(end_it != str.end())
+ str += *end_it;
+ TCHAR *tmp2 = mir_a2t(tmp.c_str());
+ ustr += tmp2;
+ mir_free(tmp2);
return ustr;
} \ No newline at end of file