From 71465258cce14f8d417ba31e3010298f7640ac2d Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sat, 20 Jul 2013 21:28:27 +0000 Subject: - built-in base64 encode removed; - various memory allocation issues git-svn-id: http://svn.miranda-ng.org/main/trunk@5435 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/JabberG/src/jabber.h | 10 +- protocols/JabberG/src/jabber_adhoc.cpp | 7 +- protocols/JabberG/src/jabber_bookmarks.cpp | 6 +- protocols/JabberG/src/jabber_byte.cpp | 6 +- protocols/JabberG/src/jabber_captcha.cpp | 10 +- protocols/JabberG/src/jabber_chat.cpp | 67 ++++++-------- protocols/JabberG/src/jabber_ft.cpp | 35 ++++--- protocols/JabberG/src/jabber_ibb.cpp | 10 +- protocols/JabberG/src/jabber_iq.h | 3 +- protocols/JabberG/src/jabber_iq_handlers.cpp | 6 +- protocols/JabberG/src/jabber_iqid.cpp | 12 +-- protocols/JabberG/src/jabber_privacy.h | 13 +-- protocols/JabberG/src/jabber_rc.h | 10 +- protocols/JabberG/src/jabber_secur.cpp | 114 ++++++++++------------- protocols/JabberG/src/jabber_util.cpp | 134 ++------------------------- protocols/JabberG/src/jabber_vcard.cpp | 2 +- 16 files changed, 134 insertions(+), 311 deletions(-) (limited to 'protocols/JabberG') diff --git a/protocols/JabberG/src/jabber.h b/protocols/JabberG/src/jabber.h index 5085fa9807..b91a720edd 100644 --- a/protocols/JabberG/src/jabber.h +++ b/protocols/JabberG/src/jabber.h @@ -701,10 +701,8 @@ struct CJabberAdhocStartupParams } ~CJabberAdhocStartupParams() { - if (m_szJid) - mir_free(m_szJid); - if (m_szNode) - mir_free(m_szNode); + mir_free(m_szJid); + mir_free(m_szNode); } }; @@ -753,9 +751,6 @@ int __stdcall JabberCombineStatus(int status1, int status2); TCHAR* __stdcall JabberErrorStr(int errorCode); TCHAR* __stdcall JabberErrorMsg(HXML errorNode, int* errorCode = NULL); void __stdcall JabberUtfToTchar(const char* str, size_t cbLen, LPTSTR& dest); -char* __stdcall JabberBase64Encode(const char* buffer, int bufferLen); -char* __stdcall JabberBase64Decode(const char* buffer, int *resultLen); -char* __stdcall JabberBase64DecodeW(const WCHAR* buffer, int *resultLen); time_t __stdcall JabberIsoToUnixTime(const TCHAR *stamp); void __stdcall JabberStringAppend(char* *str, int *sizeAlloced, const char* fmt, ...); TCHAR* __stdcall JabberStripJid(const TCHAR *jid, TCHAR* dest, size_t destLen); @@ -768,7 +763,6 @@ TCHAR* time2str(time_t _time, TCHAR *buf, size_t bufLen); time_t str2time(const TCHAR*); #define JabberUnixToDosT JabberUnixToDosW -#define JabberBase64DecodeT JabberBase64DecodeW const TCHAR *JabberStrIStr(const TCHAR *str, const TCHAR *substr); void JabberCopyText(HWND hwnd, TCHAR *text); diff --git a/protocols/JabberG/src/jabber_adhoc.cpp b/protocols/JabberG/src/jabber_adhoc.cpp index b28221f607..222a34e044 100644 --- a/protocols/JabberG/src/jabber_adhoc.cpp +++ b/protocols/JabberG/src/jabber_adhoc.cpp @@ -361,15 +361,12 @@ int CJabberProto::AdHoc_AddCommandRadio(HWND hFrame, TCHAR * labelStr, int id, i static INT_PTR CALLBACK JabberAdHoc_CommandDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) { JabberAdHocData* dat = (JabberAdHocData*)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); - switch (msg) - { + switch (msg) { case WM_INITDIALOG: { CJabberAdhocStartupParams* pStartupParams = (CJabberAdhocStartupParams *)lParam; - dat=(JabberAdHocData *)mir_alloc(sizeof(JabberAdHocData)); - memset(dat,0,sizeof(JabberAdHocData)); + dat=(JabberAdHocData *)mir_calloc(sizeof(JabberAdHocData)); - //hmmm, useless code? if (dat->ResponderJID) mir_free(dat->ResponderJID); dat->ResponderJID = mir_tstrdup(pStartupParams->m_szJid); dat->proto = pStartupParams->m_pProto; diff --git a/protocols/JabberG/src/jabber_bookmarks.cpp b/protocols/JabberG/src/jabber_bookmarks.cpp index f7cb896d58..2c2a9807e9 100644 --- a/protocols/JabberG/src/jabber_bookmarks.cpp +++ b/protocols/JabberG/src/jabber_bookmarks.cpp @@ -362,11 +362,7 @@ void CJabberDlgBookmarks::OpenBookmark() } } } - else { - char *szUrl = mir_t2a(item->jid); - CallService(MS_UTILS_OPENURL, 1, (LPARAM)szUrl); - mir_free(szUrl); - } + else CallService(MS_UTILS_OPENURL, OUF_TCHAR, (LPARAM)item->jid); } INT_PTR CJabberDlgBookmarks::DlgProc(UINT msg, WPARAM wParam, LPARAM lParam) diff --git a/protocols/JabberG/src/jabber_byte.cpp b/protocols/JabberG/src/jabber_byte.cpp index c34bf5494f..16d9c835ac 100644 --- a/protocols/JabberG/src/jabber_byte.cpp +++ b/protocols/JabberG/src/jabber_byte.cpp @@ -457,8 +457,7 @@ void CJabberProto::ByteSendViaProxy(JABBER_BYTE_TRANSFER *jbt) szHost = jbt->szProxyHost; port = (WORD)_ttoi(szPort); - if (jbt->streamhostJID) mir_free(jbt->streamhostJID); - jbt->streamhostJID = mir_tstrdup(jbt->szProxyJid); + replaceStrT(jbt->streamhostJID, jbt->szProxyJid); NETLIBOPENCONNECTION nloc = { 0 }; nloc.cbSize = sizeof(nloc); @@ -638,8 +637,7 @@ void __cdecl CJabberProto::ByteReceiveThread(JABBER_BYTE_TRANSFER *jbt) (str = xmlGetAttrValue(n, _T("jid"))) != NULL) { port = (WORD)_ttoi(szPort); - if (jbt->streamhostJID) mir_free(jbt->streamhostJID); - jbt->streamhostJID = mir_tstrdup(str); + replaceStrT(jbt->streamhostJID, str); Log("bytestream_recv connecting to %S:%d", szHost, port); NETLIBOPENCONNECTION nloc = { 0 }; diff --git a/protocols/JabberG/src/jabber_captcha.cpp b/protocols/JabberG/src/jabber_captcha.cpp index dcb9d8c3b6..ce4018ca66 100644 --- a/protocols/JabberG/src/jabber_captcha.cpp +++ b/protocols/JabberG/src/jabber_captcha.cpp @@ -111,9 +111,6 @@ INT_PTR CALLBACK JabberCaptchaFormDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, bool CJabberProto::ProcessCaptcha(HXML node, HXML parentNode, ThreadData* info) { - CAPTCHA_FORM_PARAMS param; - TCHAR *CaptchaPath = 0; - HXML x = xmlGetChildByTag(node, "x", "xmlns", JABBER_FEAT_DATA_FORMS); if (x == NULL) return false; @@ -123,6 +120,8 @@ bool CJabberProto::ProcessCaptcha(HXML node, HXML parentNode, ThreadData* info) return false; if ((y = xmlGetChild(y, "value")) == NULL) return false; + + CAPTCHA_FORM_PARAMS param; param.fromjid = xmlGetText(y); if ((y = xmlGetChildByTag(x, _T("field"), _T("var"), _T("sid"))) == NULL) @@ -142,6 +141,7 @@ bool CJabberProto::ProcessCaptcha(HXML node, HXML parentNode, ThreadData* info) if (o == NULL || xmlGetText(o) == NULL) return false; + TCHAR *CaptchaPath = 0; GetCaptchaImage(parentNode, CaptchaPath); param.bmp = (HBITMAP) CallService(MS_UTILS_LOADBITMAPT, 0, (LPARAM)CaptchaPath); DeleteFile(CaptchaPath); @@ -162,8 +162,8 @@ bool CJabberProto::ProcessCaptcha(HXML node, HXML parentNode, ThreadData* info) bool CJabberProto::GetCaptchaImage(HXML node, TCHAR*& CaptchaPath) { HXML o = xmlGetChild(node , "data"); - int bufferLen; - char* buffer = JabberBase64DecodeT(xmlGetText(o), &bufferLen); + unsigned bufferLen; + ptrA buffer((char*)mir_base64_decode( _T2A(xmlGetText(o)), &bufferLen)); if (buffer == NULL) return false; diff --git a/protocols/JabberG/src/jabber_chat.cpp b/protocols/JabberG/src/jabber_chat.cpp index 84cae898da..5018d5f3be 100644 --- a/protocols/JabberG/src/jabber_chat.cpp +++ b/protocols/JabberG/src/jabber_chat.cpp @@ -1016,9 +1016,10 @@ static INT_PTR CALLBACK sttUserInfoDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam g_ReleaseIcon((HICON)SendDlgItemMessage(hwndDlg, IDC_BTN_AFFILIATION, BM_SETIMAGE, IMAGE_ICON, 0)); g_ReleaseIcon((HICON)SendDlgItemMessage(hwndDlg, IDC_BTN_ROLE, BM_SETIMAGE, IMAGE_ICON, 0)); TUserInfoData *dat = (TUserInfoData *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA); - if ( !dat)break; - SetWindowLongPtr(hwndDlg, GWLP_USERDATA, 0); - mir_free(dat); + if (dat) { + SetWindowLongPtr(hwndDlg, GWLP_USERDATA, 0); + mir_free(dat); + } break; } return FALSE; @@ -1026,13 +1027,9 @@ static INT_PTR CALLBACK sttUserInfoDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam static void sttNickListHook(CJabberProto *ppro, JABBER_LIST_ITEM *item, GCHOOK* gch) { - JABBER_RESOURCE_STATUS *me = NULL, *him = NULL; - for (int i=0; i < item->resourceCount; i++) { - JABBER_RESOURCE_STATUS& p = item->pResources[i]; - if ( !lstrcmp(p.resourceName, item->nick )) me = &p; - if ( !lstrcmp(p.resourceName, gch->ptszUID)) him = &p; - } - + JABBER_RESOURCE_STATUS + *me = item->findResource(item->nick), + *him = item->findResource(gch->ptszUID); if (him == NULL || me == NULL) return; @@ -1043,8 +1040,7 @@ static void sttNickListHook(CJabberProto *ppro, JABBER_LIST_ITEM *item, GCHOOK* TCHAR szBuffer[1024]; TCHAR szTitle[256]; - if ((gch->dwData >= CLISTMENUIDMIN) && (gch->dwData <= CLISTMENUIDMAX)) - { + if ((gch->dwData >= CLISTMENUIDMIN) && (gch->dwData <= CLISTMENUIDMAX)) { if (him->szRealJid && *him->szRealJid) if (HANDLE hContact = ppro->HContactFromJID(him->szRealJid)) CallService(MS_CLIST_MENUPROCESSCOMMAND, MAKEWPARAM(gch->dwData, MPCF_CONTACTMENU), (LPARAM)hContact); @@ -1053,7 +1049,6 @@ static void sttNickListHook(CJabberProto *ppro, JABBER_LIST_ITEM *item, GCHOOK* switch(gch->dwData) { case IDM_SLAP: - { if (ppro->m_bJabberOnline) { DBVARIANT dbv = {0}; TCHAR *szMessage = ppro->getTString("GcMsgSlap", &dbv) ? @@ -1076,36 +1071,35 @@ static void sttNickListHook(CJabberProto *ppro, JABBER_LIST_ITEM *item, GCHOOK* db_free(&dbv); } break; - } + case IDM_VCARD: - { - HANDLE hContact; - JABBER_SEARCH_RESULT jsr = {0}; - mir_sntprintf(jsr.jid, SIZEOF(jsr.jid), _T("%s/%s"), item->jid, him->resourceName); - jsr.hdr.cbSize = sizeof(JABBER_SEARCH_RESULT); + { + JABBER_SEARCH_RESULT jsr = {0}; + mir_sntprintf(jsr.jid, SIZEOF(jsr.jid), _T("%s/%s"), item->jid, him->resourceName); + jsr.hdr.cbSize = sizeof(JABBER_SEARCH_RESULT); - JABBER_LIST_ITEM *item = ppro->ListAdd(LIST_VCARD_TEMP, jsr.jid); - ppro->ListAddResource(LIST_VCARD_TEMP, jsr.jid, him->status, him->statusMessage, him->priority); + JABBER_LIST_ITEM *item = ppro->ListAdd(LIST_VCARD_TEMP, jsr.jid); + ppro->ListAddResource(LIST_VCARD_TEMP, jsr.jid, him->status, him->statusMessage, him->priority); - hContact = (HANDLE)CallProtoService(ppro->m_szModuleName, PS_ADDTOLIST, PALF_TEMPORARY, (LPARAM)&jsr); - CallService(MS_USERINFO_SHOWDIALOG, (WPARAM)hContact, 0); + HANDLE hContact = (HANDLE)CallProtoService(ppro->m_szModuleName, PS_ADDTOLIST, PALF_TEMPORARY, (LPARAM)&jsr); + CallService(MS_USERINFO_SHOWDIALOG, (WPARAM)hContact, 0); + } break; - } + case IDM_INFO: - { - TUserInfoData *dat = (TUserInfoData *)mir_alloc(sizeof(TUserInfoData)); - dat->me = me; - dat->him = him; - dat->item = item; - dat->ppro = ppro; - HWND hwndInfo = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_GROUPCHAT_INFO), NULL, sttUserInfoDlgProc, (LPARAM)dat); - ShowWindow(hwndInfo, SW_SHOW); + { + TUserInfoData *dat = (TUserInfoData *)mir_alloc(sizeof(TUserInfoData)); + dat->me = me; + dat->him = him; + dat->item = item; + dat->ppro = ppro; + HWND hwndInfo = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_GROUPCHAT_INFO), NULL, sttUserInfoDlgProc, (LPARAM)dat); + ShowWindow(hwndInfo, SW_SHOW); + } break; - } + case IDM_KICK: - { - if ((GetTickCount() - dwLastBanKickTime) > BAN_KICK_INTERVAL) - { + if ((GetTickCount() - dwLastBanKickTime) > BAN_KICK_INTERVAL) { dwLastBanKickTime = GetTickCount(); mir_sntprintf(szBuffer, SIZEOF(szBuffer), _T("%s: "), me->resourceName); mir_sntprintf(szTitle, SIZEOF(szTitle), _T("%s %s"), TranslateT("Reason to kick"), him->resourceName); @@ -1120,7 +1114,6 @@ static void sttNickListHook(CJabberProto *ppro, JABBER_LIST_ITEM *item, GCHOOK* } dwLastBanKickTime = GetTickCount(); break; - } case IDM_SET_VISITOR: if (him->role != ROLE_VISITOR) diff --git a/protocols/JabberG/src/jabber_ft.cpp b/protocols/JabberG/src/jabber_ft.cpp index 23778a4a88..d94d944caf 100644 --- a/protocols/JabberG/src/jabber_ft.cpp +++ b/protocols/JabberG/src/jabber_ft.cpp @@ -94,7 +94,7 @@ void CJabberProto::FtInitiate(TCHAR* jid, filetransfer *ft) sid[8] = '\0'; if (ft->sid != NULL) mir_free(ft->sid); ft->sid = mir_tstrdup(sid); - filename = ft->std.ptszFiles[ ft->std.currentFileNumber ]; + filename = ft->std.ptszFiles[ft->std.currentFileNumber]; if ((p = _tcsrchr(filename, '\\')) != NULL) filename = p+1; @@ -105,7 +105,7 @@ void CJabberProto::FtInitiate(TCHAR* jid, filetransfer *ft) HXML si = iq << XCHILDNS(_T("si"), JABBER_FEAT_SI) << XATTR(_T("id"), sid) << XATTR(_T("mime-type"), _T("binary/octet-stream")) << XATTR(_T("profile"), JABBER_FEAT_SI_FT); si << XCHILDNS(_T("file"), JABBER_FEAT_SI_FT) << XATTR(_T("name"), filename) - << XATTRI64(_T("size"), ft->fileSize[ ft->std.currentFileNumber ]) << XCHILD(_T("desc"), ft->szDescription); + << XATTRI64(_T("size"), ft->fileSize[ft->std.currentFileNumber]) << XCHILD(_T("desc"), ft->szDescription); HXML field = si << XCHILDNS(_T("feature"), JABBER_FEAT_FEATURE_NEG) << XCHILDNS(_T("x"), JABBER_FEAT_DATA_FORMS) << XATTR(_T("type"), _T("form")) @@ -179,9 +179,9 @@ BOOL CJabberProto::FtSend(HANDLE hConn, filetransfer *ft) char* buffer; int numRead; - Log("Sending [%s]", ft->std.ptszFiles[ ft->std.currentFileNumber ]); - _tstati64(ft->std.ptszFiles[ ft->std.currentFileNumber ], &statbuf); // file size in statbuf.st_size - if ((fd = _topen(ft->std.ptszFiles[ ft->std.currentFileNumber ], _O_BINARY|_O_RDONLY)) < 0) { + Log("Sending [%s]", ft->std.ptszFiles[ft->std.currentFileNumber]); + _tstati64(ft->std.ptszFiles[ft->std.currentFileNumber], &statbuf); // file size in statbuf.st_size + if ((fd = _topen(ft->std.ptszFiles[ft->std.currentFileNumber], _O_BINARY|_O_RDONLY)) < 0) { Log("File cannot be opened"); return FALSE; } @@ -209,14 +209,13 @@ BOOL CJabberProto::FtSend(HANDLE hConn, filetransfer *ft) BOOL CJabberProto::FtIbbSend(int blocksize, filetransfer *ft) { - struct _stati64 statbuf; - int fd; - char* buffer; - int numRead; + Log("Sending [%s]", ft->std.ptszFiles[ft->std.currentFileNumber]); - Log("Sending [%s]", ft->std.ptszFiles[ ft->std.currentFileNumber ]); - _tstati64(ft->std.ptszFiles[ ft->std.currentFileNumber ], &statbuf); // file size in statbuf.st_size - if ((fd = _topen(ft->std.ptszFiles[ ft->std.currentFileNumber ], _O_BINARY|_O_RDONLY)) < 0) { + struct _stati64 statbuf; + _tstati64(ft->std.ptszFiles[ft->std.currentFileNumber], &statbuf); // file size in statbuf.st_size + + int fd = _topen(ft->std.ptszFiles[ft->std.currentFileNumber], _O_BINARY|_O_RDONLY); + if (fd < 0) { Log("File cannot be opened"); return FALSE; } @@ -225,8 +224,10 @@ BOOL CJabberProto::FtIbbSend(int blocksize, filetransfer *ft) ft->std.currentFileSize = statbuf.st_size; ft->std.currentFileProgress = 0; - if ((buffer=(char*)mir_alloc(blocksize)) != NULL) { - while ((numRead=_read(fd, buffer, blocksize)) > 0) { + ptrA buffer((char*)mir_alloc(blocksize)); + if (buffer != NULL) { + int numRead; + while ((numRead = _read(fd, buffer, blocksize)) > 0) { int iqId = SerialNext(); XmlNode msg(_T("message")); xmlAddAttr(msg, _T("to"), ft->jibb->dstJID); @@ -235,7 +236,7 @@ BOOL CJabberProto::FtIbbSend(int blocksize, filetransfer *ft) // let others send data too Sleep(2); - char *encoded = JabberBase64Encode(buffer, numRead); + char *encoded = mir_base64_encode((PBYTE)(char*)buffer, numRead); msg << XCHILD(_T("data"), _A2T(encoded)) << XATTR(_T("xmlns"), JABBER_FEAT_IBB) << XATTR(_T("sid"), ft->jibb->sid) << XATTRI(_T("seq"), ft->jibb->wPacketId); @@ -251,7 +252,6 @@ BOOL CJabberProto::FtIbbSend(int blocksize, filetransfer *ft) if (ft->jibb->state == JIBB_ERROR || ft->jibb->bStreamClosed || m_ThreadInfo->send(msg) == SOCKET_ERROR) { Log("JabberFtIbbSend unsuccessful exit"); - mir_free(buffer); _close(fd); return FALSE; } @@ -262,7 +262,6 @@ BOOL CJabberProto::FtIbbSend(int blocksize, filetransfer *ft) ft->std.totalProgress += numRead; ProtoBroadcastAck(ft->std.hContact, ACKTYPE_FILE, ACKRESULT_DATA, ft, (LPARAM)&ft->std); } - mir_free(buffer); } _close(fd); return TRUE; @@ -277,7 +276,7 @@ void CJabberProto::FtSendFinal(BOOL success, filetransfer *ft) else { if (ft->std.currentFileNumber < ft->std.totalFiles-1) { ft->std.currentFileNumber++; - replaceStrT(ft->std.tszCurrentFile, ft->std.ptszFiles[ ft->std.currentFileNumber ]); + replaceStrT(ft->std.tszCurrentFile, ft->std.ptszFiles[ft->std.currentFileNumber]); ProtoBroadcastAck(ft->std.hContact, ACKTYPE_FILE, ACKRESULT_NEXTFILE, ft, 0); FtInitiate(ft->jid, ft); return; diff --git a/protocols/JabberG/src/jabber_ibb.cpp b/protocols/JabberG/src/jabber_ibb.cpp index a6cf22333b..55f3ba1851 100644 --- a/protocols/JabberG/src/jabber_ibb.cpp +++ b/protocols/JabberG/src/jabber_ibb.cpp @@ -179,16 +179,12 @@ BOOL CJabberProto::OnIbbRecvdData(const TCHAR *data, const TCHAR *sid, const TCH item->jibb->wPacketId++; - int length = 0; - char *decodedData = JabberBase64DecodeT(data, &length); - if ( !decodedData) + unsigned length; + ptrA decodedData((char*)mir_base64_decode( _T2A(data), &length)); + if (decodedData == NULL) return FALSE; (this->*item->jibb->pfnRecv)(NULL, item->ft, decodedData, length); - item->jibb->dwTransferredSize += (DWORD)length; - - mir_free(decodedData); - return TRUE; } diff --git a/protocols/JabberG/src/jabber_iq.h b/protocols/JabberG/src/jabber_iq.h index 9cd3937d0a..0042a9a006 100644 --- a/protocols/JabberG/src/jabber_iq.h +++ b/protocols/JabberG/src/jabber_iq.h @@ -104,8 +104,7 @@ public: } ~CJabberIqInfo() { - if (m_szReceiver) - mir_free(m_szReceiver); + mir_free(m_szReceiver); } void SetReceiver(const TCHAR *szReceiver) { diff --git a/protocols/JabberG/src/jabber_iq_handlers.cpp b/protocols/JabberG/src/jabber_iq_handlers.cpp index 6c88eb0e4b..dfacdd5bba 100644 --- a/protocols/JabberG/src/jabber_iq_handlers.cpp +++ b/protocols/JabberG/src/jabber_iq_handlers.cpp @@ -492,7 +492,7 @@ BOOL CJabberProto::OnIqRequestAvatar(HXML, CJabberIqInfo *pInfo) return TRUE; long bytes = _filelength(_fileno(in)); - char* buffer = (char*)mir_alloc(bytes*4/3 + bytes + 1000); + ptrA buffer((char*)mir_alloc(bytes*4/3 + bytes + 1000)); if (buffer == NULL) { fclose(in); return TRUE; @@ -501,10 +501,8 @@ BOOL CJabberProto::OnIqRequestAvatar(HXML, CJabberIqInfo *pInfo) fread(buffer, bytes, 1, in); fclose(in); - char* str = JabberBase64Encode(buffer, bytes); + ptrA str( mir_base64_encode((PBYTE)(char*)buffer, bytes)); m_ThreadInfo->send( XmlNodeIq(_T("result"), pInfo) << XQUERY(JABBER_FEAT_AVATAR) << XCHILD(_T("query"), _A2T(str)) << XATTR(_T("mimetype"), szMimeType)); - mir_free(str); - mir_free(buffer); return TRUE; } diff --git a/protocols/JabberG/src/jabber_iqid.cpp b/protocols/JabberG/src/jabber_iqid.cpp index 6bd2a40761..b45bdfe821 100644 --- a/protocols/JabberG/src/jabber_iqid.cpp +++ b/protocols/JabberG/src/jabber_iqid.cpp @@ -614,11 +614,12 @@ void CJabberProto::OnIqResultGetVcardPhoto(const TCHAR *jid, HXML n, HANDLE hCon return; HXML o = xmlGetChild(n, "BINVAL"); - if (o == NULL || xmlGetText(o) == NULL) + LPCTSTR ptszBinval = xmlGetText(o); + if (o == NULL || ptszBinval == NULL) return; - int bufferLen; - ptrA buffer( JabberBase64DecodeT(xmlGetText(o), &bufferLen)); + unsigned bufferLen; + ptrA buffer((char*)mir_base64_decode( _T2A(ptszBinval), &bufferLen)); if (buffer == NULL) return; @@ -1442,8 +1443,8 @@ void CJabberProto::OnIqResultGetServerAvatar(HXML iqNode) void CJabberProto::OnIqResultGotAvatar(HANDLE hContact, HXML n, const TCHAR *mimeType) { - int resultLen = 0; - ptrA body( JabberBase64DecodeT( xmlGetText(n), &resultLen)); + unsigned resultLen; + ptrA body((char*)mir_base64_decode( _T2A(xmlGetText(n)), &resultLen)); int pictureType; if (mimeType != NULL) { @@ -1454,7 +1455,6 @@ void CJabberProto::OnIqResultGotAvatar(HANDLE hContact, HXML n, const TCHAR *mim else { LBL_ErrFormat: Log("Invalid mime type specified for picture: %S", mimeType); - mir_free(body); return; } } else if ((pictureType = JabberGetPictureType(body)) == PA_FORMAT_UNKNOWN) diff --git a/protocols/JabberG/src/jabber_privacy.h b/protocols/JabberG/src/jabber_privacy.h index aafc779bc9..ef29ce53d2 100644 --- a/protocols/JabberG/src/jabber_privacy.h +++ b/protocols/JabberG/src/jabber_privacy.h @@ -69,9 +69,7 @@ public: }; ~CPrivacyListRule() { - if (m_szValue) - mir_free(m_szValue); - + mir_free(m_szValue); if (m_pNext) delete m_pNext; }; @@ -166,8 +164,7 @@ public: }; ~CPrivacyList() { - if (m_szListName) - mir_free(m_szListName); + mir_free(m_szListName); RemoveAllRules(); if (m_pNext) delete m_pNext; @@ -341,10 +338,8 @@ public: }; ~CPrivacyListManager() { - if (m_szActiveListName) - mir_free(m_szActiveListName); - if (m_szDefaultListName) - mir_free(m_szDefaultListName); + mir_free(m_szActiveListName); + mir_free(m_szDefaultListName); RemoveAllLists(); DeleteCriticalSection(&m_cs); }; diff --git a/protocols/JabberG/src/jabber_rc.h b/protocols/JabberG/src/jabber_rc.h index 9660b36834..fae38a0bf0 100644 --- a/protocols/JabberG/src/jabber_rc.h +++ b/protocols/JabberG/src/jabber_rc.h @@ -119,12 +119,10 @@ public: } ~CJabberAdhocNode() { - if (m_szJid) - mir_free(m_szJid); - if (m_szNode) - mir_free(m_szNode); - if (m_szName) - mir_free(m_szName); + mir_free(m_szJid); + mir_free(m_szNode); + mir_free(m_szName); + if (m_pNext) delete m_pNext; } diff --git a/protocols/JabberG/src/jabber_secur.cpp b/protocols/JabberG/src/jabber_secur.cpp index 5cc728a360..251e875fd3 100644 --- a/protocols/JabberG/src/jabber_secur.cpp +++ b/protocols/JabberG/src/jabber_secur.cpp @@ -166,8 +166,8 @@ char* TMD5Auth::getChallenge(const TCHAR *challenge) iCallCount++; - int resultLen; - char* text = JabberBase64DecodeT(challenge, &resultLen); + unsigned resultLen; + ptrA text((char*)mir_base64_decode( _T2A(challenge), &resultLen)); TStringPairs pairs(text); const char *realm = pairs["realm"], *nonce = pairs["nonce"]; @@ -179,29 +179,29 @@ char* TMD5Auth::getChallenge(const TCHAR *challenge) CallService(MS_UTILS_GETRANDOM, sizeof(digest), (LPARAM)digest); sprintf(cnonce, "%08x%08x%08x%08x", htonl(digest[0]), htonl(digest[1]), htonl(digest[2]), htonl(digest[3])); - char *uname = mir_utf8encodeT(info->username), - *passw = mir_utf8encodeT(info->password), - *serv = mir_utf8encode(info->server); + ptrA uname( mir_utf8encodeT(info->username)), + passw( mir_utf8encodeT(info->password)), + serv( mir_utf8encode(info->server)); mir_md5_init(&ctx); - mir_md5_append(&ctx, (BYTE*)uname, (int)strlen(uname)); - mir_md5_append(&ctx, (BYTE*)":", 1); - mir_md5_append(&ctx, (BYTE*)realm, (int)strlen(realm)); - mir_md5_append(&ctx, (BYTE*)":", 1); - mir_md5_append(&ctx, (BYTE*)passw, (int)strlen(passw)); + mir_md5_append(&ctx, (BYTE*)(char*)uname, (int)strlen(uname)); + mir_md5_append(&ctx, (BYTE*)":", 1); + mir_md5_append(&ctx, (BYTE*)realm, (int)strlen(realm)); + mir_md5_append(&ctx, (BYTE*)":", 1); + mir_md5_append(&ctx, (BYTE*)(char*)passw, (int)strlen(passw)); mir_md5_finish(&ctx, (BYTE*)hash1); mir_md5_init(&ctx); - mir_md5_append(&ctx, (BYTE*)hash1, 16); - mir_md5_append(&ctx, (BYTE*)":", 1); + mir_md5_append(&ctx, (BYTE*)hash1, 16); + mir_md5_append(&ctx, (BYTE*)":", 1); mir_md5_append(&ctx, (BYTE*)nonce, (int)strlen(nonce)); - mir_md5_append(&ctx, (BYTE*)":", 1); + mir_md5_append(&ctx, (BYTE*)":", 1); mir_md5_append(&ctx, (BYTE*)cnonce, (int)strlen(cnonce)); mir_md5_finish(&ctx, (BYTE*)hash1); mir_md5_init(&ctx); mir_md5_append(&ctx, (BYTE*)"AUTHENTICATE:xmpp/", 18); - mir_md5_append(&ctx, (BYTE*)serv, (int)strlen(serv)); + mir_md5_append(&ctx, (BYTE*)(char*)serv, (int)strlen(serv)); mir_md5_finish(&ctx, (BYTE*)hash2); mir_md5_init(&ctx); @@ -217,19 +217,14 @@ char* TMD5Auth::getChallenge(const TCHAR *challenge) mir_md5_append(&ctx, (BYTE*)tmpBuf, (int)strlen(tmpBuf)); mir_md5_finish(&ctx, (BYTE*)digest); - char* buf = (char*)alloca(8000); + char *buf = (char*)alloca(8000); int cbLen = mir_snprintf(buf, 8000, "username=\"%s\",realm=\"%s\",nonce=\"%s\",cnonce=\"%s\",nc=%08d," "qop=auth,digest-uri=\"xmpp/%s\",charset=utf-8,response=%08x%08x%08x%08x", uname, realm, nonce, cnonce, iCallCount, serv, htonl(digest[0]), htonl(digest[1]), htonl(digest[2]), htonl(digest[3])); - mir_free(uname); - mir_free(passw); - mir_free(serv); - mir_free(text); - - return JabberBase64Encode(buf, cbLen); + return mir_base64_encode((PBYTE)buf, cbLen); } @@ -307,44 +302,46 @@ void TScramAuth::Hi(mir_sha1_byte_t* res , char* passw, size_t passwLen, char* s char* TScramAuth::getChallenge(const TCHAR *challenge) { - int chlLen; - char *chl = JabberBase64DecodeT(challenge, &chlLen); + unsigned chlLen; + ptrA chl((char*)mir_base64_decode( _T2A(challenge), &chlLen)); + + char *r = strstr(chl, "r="); + if ( !r) + return NULL; - char *r = strstr(chl, "r="); if ( !r) { mir_free(chl); return NULL; } char *e = strchr(r, ','); if (e) *e = 0; - char *snonce = mir_strdup(r + 2); + ptrA snonce( mir_strdup(r + 2)); if (e) *e = ','; size_t cnlen = strlen(cnonce); - if (strncmp(cnonce, snonce, cnlen)) { mir_free(chl); mir_free(snonce); return NULL; } + if (strncmp(cnonce, snonce, cnlen)) + return NULL; - char *s = strstr(chl, "s="); if ( !s) { mir_free(chl); mir_free(snonce); return NULL; } + char *s = strstr(chl, "s="); + if (!s) + return NULL; e = strchr(s, ','); if (e) *e = 0; - int saltLen; - char *salt = JabberBase64Decode(s + 2, &saltLen); + + unsigned saltLen; + ptrA salt((char*)mir_base64_decode(s + 2, &saltLen)); if (e) *e = ','; + if (saltLen > 16) + return NULL; - if (saltLen > 16) { - mir_free(salt); - mir_free(snonce); - mir_free(chl); + char *in = strstr(chl, "i="); + if (!in) return NULL; - } - char *in = strstr(chl, "i="); if ( !in) return NULL; e = strchr(in, ','); if (e) *e = 0; int ind = atoi(in + 2); if (e) *e = ','; - char *passw = mir_utf8encodeT(info->password); + ptrA passw( mir_utf8encodeT(info->password)); size_t passwLen = strlen(passw); mir_sha1_byte_t saltedPassw[ MIR_SHA1_HASH_SIZE ]; Hi(saltedPassw, passw, passwLen, salt, saltLen, ind); - mir_free(salt); - mir_free(passw); - mir_sha1_byte_t clientKey[ MIR_SHA1_HASH_SIZE ]; hmac_sha1(clientKey, saltedPassw, sizeof(saltedPassw), (mir_sha1_byte_t*)"Client Key", 10); @@ -371,46 +368,33 @@ char* TScramAuth::getChallenge(const TCHAR *challenge) mir_sha1_byte_t srvSig[ MIR_SHA1_HASH_SIZE ]; hmac_sha1(srvSig, serverKey, sizeof(serverKey), (mir_sha1_byte_t*)authmsg, authmsgLen); - serverSignature = JabberBase64Encode((char*)srvSig, sizeof(srvSig)); + serverSignature = mir_base64_encode((PBYTE)srvSig, sizeof(srvSig)); char buf[4096]; - char *encproof = JabberBase64Encode((char*)clientProof, sizeof(clientProof)); + ptrA encproof( mir_base64_encode((PBYTE)clientProof, sizeof(clientProof))); int cbLen = mir_snprintf(buf, sizeof(buf), "c=biws,r=%s,p=%s", snonce, encproof); - - mir_free(encproof); - mir_free(snonce); - mir_free(chl); - - return JabberBase64Encode(buf, cbLen); + return mir_base64_encode((PBYTE)buf, cbLen); } char* TScramAuth::getInitialRequest() { - char *uname = mir_utf8encodeT(info->username), - *serv = mir_utf8encode(info->server); + ptrA uname( mir_utf8encodeT(info->username)), serv( mir_utf8encode(info->server)); unsigned char nonce[24]; CallService(MS_UTILS_GETRANDOM, sizeof(nonce), (LPARAM)nonce); - cnonce = JabberBase64Encode((char*)nonce, sizeof(nonce)); + cnonce = mir_base64_encode((PBYTE)nonce, sizeof(nonce)); char buf[4096]; int cbLen = mir_snprintf(buf, sizeof(buf), "n,,n=%s@%s,r=%s", uname, serv, cnonce); msg1 = mir_strdup(buf + 3); - - mir_free(serv); - mir_free(uname); - - return JabberBase64Encode(buf, cbLen); + return mir_base64_encode((PBYTE)buf, cbLen); } bool TScramAuth::validateLogin(const TCHAR *challenge) { - int chlLen; - char* chl = JabberBase64DecodeT(challenge, &chlLen); - bool res = chl && strncmp(chl + 2, serverSignature, chlLen - 2) == 0; - mir_free(chl); - - return res; + unsigned chlLen; + ptrA chl((char*)mir_base64_decode( _T2A(challenge), &chlLen)); + return chl && strncmp((char*)chl + 2, serverSignature, chlLen - 2) == 0; } ///////////////////////////////////////////////////////////////////////////////////////// @@ -429,8 +413,7 @@ TPlainAuth::~TPlainAuth() char* TPlainAuth::getInitialRequest() { - char *uname = mir_utf8encodeT(info->username), - *passw = mir_utf8encodeT(info->password); + ptrA uname( mir_utf8encodeT(info->username)), passw( mir_utf8encodeT(info->password)); size_t size = 2 * strlen(uname) + strlen(passw) + strlen(info->server) + 4; char *toEncode = (char*)alloca(size); @@ -439,10 +422,7 @@ char* TPlainAuth::getInitialRequest() else size = mir_snprintf(toEncode, size, "%c%s%c%s", 0, uname, 0, passw); - mir_free(uname); - mir_free(passw); - - return JabberBase64Encode(toEncode, (int)size); + return mir_base64_encode((PBYTE)toEncode, (int)size); } ///////////////////////////////////////////////////////////////////////////////////////// diff --git a/protocols/JabberG/src/jabber_util.cpp b/protocols/JabberG/src/jabber_util.cpp index 9814cd302c..2abab23957 100644 --- a/protocols/JabberG/src/jabber_util.cpp +++ b/protocols/JabberG/src/jabber_util.cpp @@ -93,7 +93,7 @@ HANDLE CJabberProto::ChatRoomHContactFromJID(const TCHAR *jid) HANDLE CJabberProto::HContactFromJID(const TCHAR *jid , BOOL bStripResource) { if (jid == NULL) - return (HANDLE)NULL; + return NULL; JABBER_LIST_ITEM *item = ListGetItemPtr(LIST_CHATROOM, jid); @@ -330,32 +330,27 @@ void __stdcall JabberUtfToTchar(const char* pszValue, size_t cbLen, LPTSTR& dest JabberUrlDecode(pszCopy); - mir_utf8decode(pszCopy, &dest); - if (bNeedsFree) free(pszCopy); } char* __stdcall JabberSha1(char* str) { - mir_sha1_ctx sha; - mir_sha1_byte_t digest[20]; - char* result; - int i; - if (str == NULL) return NULL; + mir_sha1_byte_t digest[20]; + mir_sha1_ctx sha; mir_sha1_init(&sha); mir_sha1_append(&sha, (mir_sha1_byte_t*)str, (int)strlen(str)); mir_sha1_finish(&sha, digest); - if ((result=(char*)mir_alloc(41)) == NULL) - return NULL; - for (i=0; i<20; i++) - sprintf(result+(i<<1), "%02x", digest[i]); + char *result = (char*)mir_alloc(41); + if (result) + for (int i=0; i < 20; i++) + sprintf(result+(i<<1), "%02x", digest[i]); return result; } @@ -601,121 +596,6 @@ void CJabberProto::SendVisibleInvisiblePresence(BOOL invisible) SendPresenceTo(m_iStatus, item->jid, NULL); } } -///////////////////////////////////////////////////////////////////////////////////////// -// JabberBase64Encode - -static char b64table[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - -char* __stdcall JabberBase64Encode(const char* buffer, int bufferLen) -{ - if (buffer == NULL || bufferLen<=0) - return NULL; - - char* res = (char*)mir_alloc((((bufferLen+2)*4)/3) + 1); - if (res == NULL) - return NULL; - - unsigned char igroup[3]; - char *r = res; - const char* peob = buffer + bufferLen; - for (const char* p = buffer; p < peob;) { - igroup[ 0 ] = igroup[ 1 ] = igroup[ 2 ] = 0; - int n; - for (n=0; n<3; n++) { - if (p >= peob) break; - igroup[n] = (unsigned char) *p; - p++; - } - - if (n > 0) { - r[0] = b64table[ igroup[0]>>2 ]; - r[1] = b64table[ ((igroup[0]&3)<<4) | (igroup[1]>>4) ]; - r[2] = b64table[ ((igroup[1]&0xf)<<2) | (igroup[2]>>6) ]; - r[3] = b64table[ igroup[2]&0x3f ]; - - if (n < 3) { - r[3] = '='; - if (n < 2) - r[2] = '='; - } - r += 4; - } } - - *r = '\0'; - - return res; -} - -///////////////////////////////////////////////////////////////////////////////////////// -// JabberBase64Decode - -static unsigned char b64rtable[256]; - -char* __stdcall JabberBase64DecodeW(const WCHAR* str, int *resultLen) -{ - char *stra = mir_u2a(str); - char *res = JabberBase64Decode(stra, resultLen); - mir_free(stra); - return res; -} - -char* __stdcall JabberBase64Decode(const char* str, int *resultLen) -{ - char* res; - unsigned char* r, igroup[4], a[4]; - int n, num, count; - - if (str == NULL || resultLen == NULL) return NULL; - if ((res=(char*)mir_alloc(((strlen(str)+3)/4)*3)) == NULL) return NULL; - - for (n=0; n<256; n++) - b64rtable[n] = (unsigned char) 0x80; - for (n=0; n<26; n++) - b64rtable['A'+n] = n; - for (n=0; n<26; n++) - b64rtable['a'+n] = n + 26; - for (n=0; n<10; n++) - b64rtable['0'+n] = n + 52; - b64rtable['+'] = 62; - b64rtable['/'] = 63; - b64rtable['='] = 0; - count = 0; - for (r=(unsigned char*)res; *str != '\0';) { - for (n=0; n<4; n++) { - if (BYTE(*str) == '\r' || BYTE(*str) == '\n') { - n--; str++; - continue; - } - - if (BYTE(*str)=='\0') { - if (n == 0) - goto LBL_Exit; - mir_free(res); - return NULL; - } - - if (b64rtable[BYTE(*str)]==0x80) { - mir_free(res); - return NULL; - } - - a[n] = BYTE(*str); - igroup[n] = b64rtable[BYTE(*str)]; - str++; - } - r[0] = igroup[0]<<2 | igroup[1]>>4; - r[1] = igroup[1]<<4 | igroup[2]>>2; - r[2] = igroup[2]<<6 | igroup[3]; - r += 3; - num = (a[2]=='='?1:(a[3]=='='?2:3)); - count += num; - if (num < 3) break; - } -LBL_Exit: - *resultLen = count; - return res; -} - time_t __stdcall JabberIsoToUnixTime(const TCHAR *stamp) { struct tm timestamp; diff --git a/protocols/JabberG/src/jabber_vcard.cpp b/protocols/JabberG/src/jabber_vcard.cpp index 39dc3a6799..566c276bf2 100644 --- a/protocols/JabberG/src/jabber_vcard.cpp +++ b/protocols/JabberG/src/jabber_vcard.cpp @@ -1155,7 +1155,7 @@ void CJabberProto::SetServerVcard(BOOL bPhotoChanged, TCHAR* szPhotoFileName) if ((hFile=CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE) { if ((buffer=(char*)mir_alloc(st.st_size)) != NULL) { if (ReadFile(hFile, buffer, st.st_size, &nRead, NULL)) { - if ((str=JabberBase64Encode(buffer, nRead)) != NULL) { + if ((str=mir_base64_encode((PBYTE)buffer, nRead)) != NULL) { n = v << XCHILD(_T("PHOTO")); TCHAR *szFileType; switch(JabberGetPictureType(buffer)) { -- cgit v1.2.3