diff options
-rw-r--r-- | messages.cpp | 18 | ||||
-rw-r--r-- | utilities.cpp | 35 |
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 |