Skip to content

Commit

Permalink
fixes #3385 (IEView: crash on filetransfer open)
Browse files Browse the repository at this point in the history
  • Loading branch information
georgehazan authored and tweimer committed Apr 17, 2023
1 parent 333715e commit 8b756c8
Show file tree
Hide file tree
Showing 7 changed files with 123 additions and 131 deletions.
13 changes: 6 additions & 7 deletions plugins/IEView/src/HistoryHTMLBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ HistoryHTMLBuilder::HistoryHTMLBuilder()
startedTime = time(0);
}

bool HistoryHTMLBuilder::isDbEventShown(DBEVENTINFO * dbei)
bool HistoryHTMLBuilder::isDbEventShown(DBEVENTINFO *dbei)
{
switch (dbei->eventType) {
case EVENTTYPE_MESSAGE:
Expand All @@ -90,7 +90,7 @@ char *HistoryHTMLBuilder::timestampToString(time_t check)
return szResult;
}

void HistoryHTMLBuilder::loadMsgDlgFont(const char *dbSetting, LOGFONTA * lf, COLORREF * colour, COLORREF * bkgColour)
void HistoryHTMLBuilder::loadMsgDlgFont(const char *dbSetting, LOGFONTA *lf, COLORREF *colour, COLORREF *bkgColour)
{
char str[128];
int style;
Expand Down Expand Up @@ -133,12 +133,12 @@ void HistoryHTMLBuilder::loadMsgDlgFont(const char *dbSetting, LOGFONTA * lf, CO
}
}

const char *HistoryHTMLBuilder::getTemplateFilename(ProtocolSettings * protoSettings)
const char *HistoryHTMLBuilder::getTemplateFilename(ProtocolSettings *protoSettings)
{
return protoSettings->getHistoryTemplateFilename();
}

int HistoryHTMLBuilder::getFlags(ProtocolSettings * protoSettings)
int HistoryHTMLBuilder::getFlags(ProtocolSettings *protoSettings)
{
return protoSettings->getHistoryFlags();
}
Expand Down Expand Up @@ -222,12 +222,11 @@ void HistoryHTMLBuilder::buildHead(IEView *view, IEVIEWEVENT *event)
void HistoryHTMLBuilder::appendEventNonTemplate(IEView *view, IEVIEWEVENT *event)
{
uint32_t dwFlags = db_get_b(0, HPPMOD, SRMSGSET_SHOWICONS, 0) ? SMF_LOG_SHOWICONS : 0;
IEVIEWEVENTDATA* eventData = event->eventData;
IEVIEWEVENTDATA *eventData = event->eventData;
for (int eventIdx = 0; eventData != nullptr && (eventIdx < event->count || event->count == -1); eventData = eventData->next, eventIdx++) {
CMStringA str;
bool isSent = (eventData->dwFlags & IEEDF_SENT) != 0;
if (eventData->iType == IEED_EVENT_MESSAGE || eventData->iType == IEED_EVENT_STATUSCHANGE || eventData->iType == IEED_EVENT_FILE)
{
if (eventData->iType == IEED_EVENT_MESSAGE || eventData->iType == IEED_EVENT_STATUSCHANGE || eventData->iType == IEED_EVENT_FILE) {
ptrA szName, szText;
if (eventData->dwFlags & IEEDF_UNICODE_NICK)
szName = encodeUTF8(event->hContact, eventData->szNick.w, ENF_NAMESMILEYS, true);
Expand Down
68 changes: 32 additions & 36 deletions plugins/IEView/src/IEView.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define DISPID_NAVIGATECOMPLETE2 252 // UIActivate new document
#define DISPID_DOCUMENTCOMPLETE 259 // new document goes ReadyState_Complete

IEView* IEView::list = nullptr;
IEView *IEView::list = nullptr;
mir_cs IEView::mutex;

static LRESULT CALLBACK IEViewServerWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
Expand Down Expand Up @@ -115,7 +115,7 @@ STDMETHODIMP IEViewSink::QueryInterface(REFIID riid, PVOID *ppv)
*ppv = (IDispatch *)this;

if (DIID_DWebBrowserEvents2 == riid)
*ppv = (DWebBrowserEvents2*)this;
*ppv = (DWebBrowserEvents2 *)this;

if (nullptr != *ppv) {
((LPUNKNOWN)*ppv)->AddRef();
Expand All @@ -137,10 +137,10 @@ STDMETHODIMP_(ULONG) IEViewSink::Release(void)
}

STDMETHODIMP IEViewSink::GetTypeInfoCount(UINT *) { return E_NOTIMPL; }
STDMETHODIMP IEViewSink::GetTypeInfo(UINT, LCID, LPTYPEINFO*) { return S_OK; }
STDMETHODIMP IEViewSink::GetIDsOfNames(REFIID, LPOLESTR*, UINT, LCID, DISPID*) { return S_OK; }
STDMETHODIMP IEViewSink::GetTypeInfo(UINT, LCID, LPTYPEINFO *) { return S_OK; }
STDMETHODIMP IEViewSink::GetIDsOfNames(REFIID, LPOLESTR *, UINT, LCID, DISPID *) { return S_OK; }

STDMETHODIMP IEViewSink::Invoke(DISPID dispIdMember, REFIID, LCID, uint16_t, DISPPARAMS* pDispParams, VARIANT*, EXCEPINFO*, UINT*)
STDMETHODIMP IEViewSink::Invoke(DISPID dispIdMember, REFIID, LCID, uint16_t, DISPPARAMS *pDispParams, VARIANT *, EXCEPINFO *, UINT *)
{
if (!pDispParams) return E_INVALIDARG;
switch (dispIdMember) {
Expand All @@ -165,17 +165,17 @@ void IEViewSink::DownloadBegin() {}
void IEViewSink::DownloadComplete() {}
void IEViewSink::TitleChange(BSTR) {}
void IEViewSink::PropertyChange(BSTR) {}
void IEViewSink::BeforeNavigate2(IDispatch*, VARIANT* url, VARIANT*, VARIANT*, VARIANT*, VARIANT*, VARIANT_BOOL* cancel)
void IEViewSink::BeforeNavigate2(IDispatch *, VARIANT *url, VARIANT *, VARIANT *, VARIANT *, VARIANT *, VARIANT_BOOL *cancel)
{
if (mir_wstrcmp(url->bstrVal, L"about:blank")) {
Utils_OpenUrlW(url->bstrVal);
*cancel = VARIANT_TRUE;
}
}

void IEViewSink::NewWindow2(IDispatch**, VARIANT_BOOL*) {}
void IEViewSink::NavigateComplete(IDispatch*, VARIANT*) {}
void IEViewSink::DocumentComplete(IDispatch*, VARIANT*) {}
void IEViewSink::NewWindow2(IDispatch **, VARIANT_BOOL *) {}
void IEViewSink::NavigateComplete(IDispatch *, VARIANT *) {}
void IEViewSink::DocumentComplete(IDispatch *, VARIANT *) {}
void IEViewSink::OnQuit() {}
void IEViewSink::OnVisible(VARIANT_BOOL) {}
void IEViewSink::OnToolBar(VARIANT_BOOL) {}
Expand All @@ -188,10 +188,10 @@ void IEViewSink::WindowSetLeft(long) {}
void IEViewSink::WindowSetTop(long) {}
void IEViewSink::WindowSetWidth(long) {}
void IEViewSink::WindowSetHeight(long) {}
void IEViewSink::WindowClosing(VARIANT_BOOL, VARIANT_BOOL*) {}
void IEViewSink::WindowClosing(VARIANT_BOOL, VARIANT_BOOL *) {}
void IEViewSink::ClientToHostWindow(long *, long *) {}
void IEViewSink::SetSecureLockIcon(long) {}
void IEViewSink::FileDownload(VARIANT_BOOL*) {}
void IEViewSink::FileDownload(VARIANT_BOOL *) {}

void IEView::waitWhileBusy()
{
Expand Down Expand Up @@ -306,7 +306,7 @@ void IEView::release()
list = nullptr;
}

IEView* IEView::get(HWND hwnd)
IEView *IEView::get(HWND hwnd)
{
if (list == nullptr) return nullptr;

Expand Down Expand Up @@ -355,17 +355,17 @@ STDMETHODIMP IEView::QueryInterface(REFIID riid, PVOID *ppv)
if (IID_IUnknown == riid)
*ppv = this;
if (IID_IOleClientSite == riid)
*ppv = (IOleClientSite*)this;//Unknown)m_pIOleClientSite;
*ppv = (IOleClientSite *)this;//Unknown)m_pIOleClientSite;
if (IID_IOleWindow == riid || IID_IOleInPlaceSite == riid)
*ppv = (IOleInPlaceSite*)this;//m_pIOleIPSite;
*ppv = (IOleInPlaceSite *)this;//m_pIOleIPSite;
if (IID_IDocHostUIHandler == riid)
*ppv = (IDocHostUIHandler*)this;//m_pIOleIPSite;
*ppv = (IDocHostUIHandler *)this;//m_pIOleIPSite;
if (IID_IInternetSecurityManager == riid)
*ppv = (IInternetSecurityManager*)this;
*ppv = (IInternetSecurityManager *)this;
if (IID_IServiceProvider == riid)
*ppv = (IServiceProvider*)this;
*ppv = (IServiceProvider *)this;
if (IID_IDispatch == riid)
*ppv = (IDispatch*)this;
*ppv = (IDispatch *)this;

if (nullptr != *ppv) {
((LPUNKNOWN)*ppv)->AddRef();
Expand Down Expand Up @@ -393,15 +393,14 @@ STDMETHODIMP IEView::GetTypeInfoCount(UINT *pctinfo)
*pctinfo = 4;
return S_OK;
}
STDMETHODIMP IEView::GetTypeInfo(UINT, LCID, LPTYPEINFO*)
STDMETHODIMP IEView::GetTypeInfo(UINT, LCID, LPTYPEINFO *)
{
return S_OK;
}
STDMETHODIMP IEView::GetIDsOfNames(REFIID /*riid*/, LPOLESTR *rgszNames, UINT cNames, LCID /*lcid*/, DISPID *rgDispId)
{
HRESULT retval = S_OK;
for (size_t i = 0; i < cNames; i++)
{
for (size_t i = 0; i < cNames; i++) {
if (!wcscmp(L"db_get", rgszNames[i]))
rgDispId[i] = DISPID_EXTERNAL_DB_GET;
else if (!wcscmp(L"db_set", rgszNames[i]))
Expand All @@ -420,8 +419,7 @@ STDMETHODIMP IEView::GetIDsOfNames(REFIID /*riid*/, LPOLESTR *rgszNames, UINT cN
else if (!wcscmp(L"mir_CallContactService", rgszNames[i]))
rgDispId[i] = DISPID_EXTERNAL_CALLCONTACTSERVICE;

else
{
else {
rgDispId[i] = NULL;
retval = DISP_E_UNKNOWNNAME;
}
Expand All @@ -439,8 +437,7 @@ STDMETHODIMP IEView::Invoke(DISPID dispIdMember,
UINT * /*puArgErr*/)
{

switch (dispIdMember)
{
switch (dispIdMember) {
case DISPID_EXTERNAL_CALLSERVICE:
return External::mir_CallService(pDispParams, pVarResult);
case DISPID_EXTERNAL_CALLCONTACTSERVICE:
Expand Down Expand Up @@ -565,7 +562,7 @@ STDMETHODIMP IEView::RequestNewObjectLayout(void)
STDMETHODIMP IEView::ShowContextMenu(DWORD dwID, POINT *ppt, IUnknown *pcmdTarget, IDispatch *)
{
CComPtr<IOleCommandTarget> pOleCommandTarget;
if (SUCCEEDED(pcmdTarget->QueryInterface(IID_IOleCommandTarget, (void**)&pOleCommandTarget))) {
if (SUCCEEDED(pcmdTarget->QueryInterface(IID_IOleCommandTarget, (void **)&pOleCommandTarget))) {
CComPtr<IOleWindow> pOleWindow;
if (SUCCEEDED(pOleCommandTarget.QueryInterface(&pOleWindow))) {
HWND hSPWnd;
Expand All @@ -588,7 +585,7 @@ STDMETHODIMP IEView::ShowContextMenu(DWORD dwID, POINT *ppt, IUnknown *pcmdTarge
ppt->y,
0,
hwnd,
(RECT*)nullptr);
(RECT *)nullptr);
DestroyMenu(hMenu);
if (iSelection == ID_MENU_CLEARLOG)
clear(nullptr);
Expand Down Expand Up @@ -638,7 +635,7 @@ STDMETHODIMP IEView::FilterDataObject(IDataObject *, IDataObject **) { return E_


/* IServiceProvider */
STDMETHODIMP IEView::QueryService(REFGUID guidService, REFIID riid, void** ppvObject)
STDMETHODIMP IEView::QueryService(REFGUID guidService, REFIID riid, void **ppvObject)
{
if (guidService == SID_SInternetSecurityManager && riid == IID_IInternetSecurityManager) {
return (HRESULT)this->QueryInterface(riid, ppvObject);
Expand Down Expand Up @@ -698,7 +695,7 @@ STDMETHODIMP IEView::ProcessUrlAction(LPCWSTR pwszUrl, DWORD dwAction, uint8_t *
else return INET_E_DEFAULT_ACTION;

if (cbPolicy >= sizeof(uint32_t)) {
*(uint32_t*)pPolicy = dwPolicy;
*(uint32_t *)pPolicy = dwPolicy;
return S_OK;
}

Expand All @@ -722,7 +719,7 @@ STDMETHODIMP IEView::GetZoneMappings(DWORD, IEnumString **, DWORD)
return INET_E_DEFAULT_ACTION;
}

IHTMLDocument2* IEView::getDocument()
IHTMLDocument2 *IEView::getDocument()
{
CComPtr<IDispatch> dispatch;
if (SUCCEEDED(pWebBrowser->get_Document(&dispatch)) && dispatch != nullptr) {
Expand Down Expand Up @@ -848,8 +845,7 @@ void IEView::navigate(const wchar_t *url)
}

void IEView::documentClose()
{
}
{}

void IEView::appendEventOld(IEVIEWEVENT *event)
{
Expand Down Expand Up @@ -911,7 +907,7 @@ void IEView::clear(IEVIEWEVENT *event)
setBorder();
}

wchar_t* IEView::selection()
wchar_t *IEView::selection()
{
wszSelectedText = getSelection();
return (mir_wstrlen(wszSelectedText) == 0) ? nullptr : wszSelectedText.get();
Expand Down Expand Up @@ -943,7 +939,7 @@ void IEView::translateAccelerator(UINT uMsg, WPARAM wParam, LPARAM lParam)
/**
* Returns the selected text within the active document
**/
wchar_t* IEView::getSelection()
wchar_t *IEView::getSelection()
{
CComPtr<IHTMLDocument2> document = getDocument();
if (document == nullptr)
Expand Down Expand Up @@ -974,7 +970,7 @@ wchar_t* IEView::getSelection()
/**
* Returns the destination url (href) of the given anchor element (or parent anchor element)
**/
wchar_t* IEView::getHrefFromAnchor(CComPtr<IHTMLElement> element)
wchar_t *IEView::getHrefFromAnchor(CComPtr<IHTMLElement> element)
{
if (element == nullptr)
return nullptr;
Expand Down Expand Up @@ -1061,4 +1057,4 @@ void IEView::navigate(IEVIEWNAVIGATE *nav)
navigate(nav->url.w);
else
navigate(nav->url.a);
}
}
20 changes: 10 additions & 10 deletions plugins/IEView/src/ScriverHTMLBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ ScriverHTMLBuilder::ScriverHTMLBuilder()
startedTime = time(0);
}

bool ScriverHTMLBuilder::isDbEventShown(DBEVENTINFO * dbei)
bool ScriverHTMLBuilder::isDbEventShown(DBEVENTINFO *dbei)
{
switch (dbei->eventType) {
case EVENTTYPE_MESSAGE:
Expand All @@ -80,7 +80,7 @@ bool ScriverHTMLBuilder::isDbEventShown(DBEVENTINFO * dbei)
}
}

void ScriverHTMLBuilder::loadMsgDlgFont(int i, LOGFONTA * lf, COLORREF * colour)
void ScriverHTMLBuilder::loadMsgDlgFont(int i, LOGFONTA *lf, COLORREF *colour)
{
char str[32];
int style;
Expand Down Expand Up @@ -118,7 +118,7 @@ void ScriverHTMLBuilder::loadMsgDlgFont(int i, LOGFONTA * lf, COLORREF * colour)
}
}

char* ScriverHTMLBuilder::timestampToString(uint32_t dwFlags, time_t check, int mode)
char *ScriverHTMLBuilder::timestampToString(uint32_t dwFlags, time_t check, int mode)
{
static char szResult[512]; szResult[0] = '\0';
char str[80];
Expand All @@ -134,13 +134,13 @@ char* ScriverHTMLBuilder::timestampToString(uint32_t dwFlags, time_t check, int
today = mktime(&tm_today);

if (dwFlags & SMF_LOG_USERELATIVEDATE && check >= today) {
strncpy(szResult, Translate("Today"), _countof(szResult)-1);
strncpy(szResult, Translate("Today"), _countof(szResult) - 1);
if (mode == 0) {
mir_strcat(szResult, ",");
}
}
else if (dwFlags & SMF_LOG_USERELATIVEDATE && check > (today - 86400)) {
strncpy(szResult, Translate("Yesterday"), _countof(szResult)-1);
strncpy(szResult, Translate("Yesterday"), _countof(szResult) - 1);
if (mode == 0) {
mir_strcat(szResult, ",");
}
Expand Down Expand Up @@ -179,7 +179,7 @@ void ScriverHTMLBuilder::buildHead(IEView *view, IEVIEWEVENT *event)
buildHeadTemplate(view, event, protoSettings);
return;
}

CMStringA str;
if (protoSettings->getSRMMMode() == Options::MODE_CSS) {
const char *externalCSS = protoSettings->getSRMMCssFilename();
Expand Down Expand Up @@ -273,7 +273,7 @@ void ScriverHTMLBuilder::appendEventNonTemplate(IEView *view, IEVIEWEVENT *event
dwFlags |= db_get_b(0, SRMMMOD, SRMSGSET_MESSAGEONNEWLINE, 0) ? SMF_LOG_MSGONNEWLINE : 0;
dwFlags |= db_get_b(0, SRMMMOD, SRMSGSET_DRAWLINES, 0) ? SMF_LOG_DRAWLINES : 0;

IEVIEWEVENTDATA* eventData = event->eventData;
IEVIEWEVENTDATA *eventData = event->eventData;
for (int eventIdx = 0; eventData != nullptr && (eventIdx < event->count || event->count == -1); eventData = eventData->next, eventIdx++) {
const char *className = "";
bool isSent = (eventData->dwFlags & IEEDF_SENT) != 0;
Expand Down Expand Up @@ -328,8 +328,8 @@ void ScriverHTMLBuilder::appendEventNonTemplate(IEView *view, IEVIEWEVENT *event

if (dwFlags & SMF_LOG_SHOWTIME &&
(eventData->iType != IEED_EVENT_MESSAGE ||
(dwFlags & SMF_LOG_MARKFOLLOWUPS || isGroupBreak || !(dwFlags & SMF_LOG_GROUPMESSAGES)))) {
char* timestampString = nullptr;
(dwFlags & SMF_LOG_MARKFOLLOWUPS || isGroupBreak || !(dwFlags & SMF_LOG_GROUPMESSAGES)))) {
char *timestampString = nullptr;
if (dwFlags & SMF_LOG_GROUPMESSAGES) {
if (isGroupBreak) {
if (!(dwFlags & SMF_LOG_MARKFOLLOWUPS))
Expand Down Expand Up @@ -382,7 +382,7 @@ void ScriverHTMLBuilder::appendEventNonTemplate(IEView *view, IEVIEWEVENT *event
else className = "notices";

if (eventData->iType == IEED_EVENT_FILE) {
str.AppendFormat("<span class=\"%s\">%s: %s</span>", className,
str.AppendFormat("<span class=\"%s\">%s: %s</span>", className,
(isSent) ? Translate("File sent") : Translate("File received"), szText.get());
}
else str.AppendFormat("<span class=\"%s\">%s</span>", className, szText.get());
Expand Down

0 comments on commit 8b756c8

Please sign in to comment.