From 80ccccc6c8889ef287e78e0cf31a268ec2a39942 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 6 Jan 2019 17:20:24 +0200 Subject: ICQ: crash fix --- protocols/Icq10/src/server.cpp | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) (limited to 'protocols/Icq10/src') diff --git a/protocols/Icq10/src/server.cpp b/protocols/Icq10/src/server.cpp index 835b0aac16..d67b2924a5 100644 --- a/protocols/Icq10/src/server.cpp +++ b/protocols/Icq10/src/server.cpp @@ -516,26 +516,32 @@ void CIcqProto::OnStartSession(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest*) void CIcqProto::OnReceiveAvatar(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq) { MCONTACT hContact = (MCONTACT)pReq->pUserInfo; + PROTO_AVATAR_INFORMATION ai = {}; + ai.hContact = hContact; + + if (pReply->resultCode != 200 || pReply->pData == nullptr) { +LBL_Error: + ProtoBroadcastAck(hContact, ACKTYPE_AVATAR, ACKRESULT_FAILED, HANDLE(&ai), 0); + return; + } const wchar_t *pwszExtension; - PROTO_AVATAR_INFORMATION ai; - ai.hContact = hContact; ai.format = ProtoGetBufferFormat(pReply->pData, &pwszExtension); setByte(hContact, "AvatarType", ai.format); GetAvatarFileName(hContact, ai.filename, _countof(ai.filename)); FILE *out = _wfopen(ai.filename, L"wb"); - if (out != nullptr) { - fwrite(pReply->pData, pReply->dataLength, 1, out); - fclose(out); - - if (hContact != 0) { - ProtoBroadcastAck(hContact, ACKTYPE_AVATAR, ACKRESULT_SUCCESS, HANDLE(&ai), 0); - debugLogW(L"Broadcast new avatar: %s", ai.filename); - } - else CallService(MS_AV_REPORTMYAVATARCHANGED, (WPARAM)m_szModuleName, 0); + if (out == nullptr) + goto LBL_Error; + + fwrite(pReply->pData, pReply->dataLength, 1, out); + fclose(out); + + if (hContact != 0) { + ProtoBroadcastAck(hContact, ACKTYPE_AVATAR, ACKRESULT_SUCCESS, HANDLE(&ai), 0); + debugLogW(L"Broadcast new avatar: %s", ai.filename); } - else ProtoBroadcastAck(hContact, ACKTYPE_AVATAR, ACKRESULT_FAILED, HANDLE(&ai), 0); + else CallService(MS_AV_REPORTMYAVATARCHANGED, (WPARAM)m_szModuleName, 0); } void CIcqProto::OnSearchResults(NETLIBHTTPREQUEST *pReply, AsyncHttpRequest *pReq) -- cgit v1.2.3