Skip to content

Commit 876997e

Browse files
committed
26.6.19 Some fix
1 parent 4c1d3d5 commit 876997e

2 files changed

Lines changed: 46 additions & 20 deletions

File tree

tewv/Resource.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@
55
#define STRING2(str) #str
66
#define VER_Y 26
77
#define VER_M 6
8-
#define VER_D 11
8+
#define VER_D 19
99
#define VER_Z 0

tewv/tewv.cpp

Lines changed: 45 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,7 @@ STDMETHODIMP CteBase::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
533533

534534
STDMETHODIMP CteBase::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
535535
{
536-
CHAR pszName[9];
536+
CHAR pszName[9] = { 0 };
537537
for (int i = 0;; ++i) {
538538
WCHAR wc = rgszNames[0][i];
539539
if (i == _countof(pszName) - 1 || wc < '0' || wc > 'z') {
@@ -754,13 +754,13 @@ STDMETHODIMP CteBase::put_Height(long Height)
754754

755755
STDMETHODIMP CteBase::get_LocationName(BSTR *LocationName)
756756
{
757-
*LocationName = ::SysAllocString(m_bstrPath);
757+
*LocationName = ::SysAllocString(m_bstrPath ? m_bstrPath : L"");
758758
return S_OK;
759759
}
760760

761761
STDMETHODIMP CteBase::get_LocationURL(BSTR *LocationURL)
762762
{
763-
*LocationURL = ::SysAllocString(m_bstrPath);
763+
*LocationURL = ::SysAllocString(m_bstrPath ? m_bstrPath : L"");
764764
return S_OK;
765765
}
766766

@@ -773,7 +773,7 @@ STDMETHODIMP CteBase::get_Busy(VARIANT_BOOL *pBool)
773773
//IWebBrowserApp
774774
STDMETHODIMP CteBase::Quit(void)
775775
{
776-
return m_webviewWindow->Stop();
776+
return m_webviewWindow ? m_webviewWindow->Stop() : E_NOINTERFACE;
777777
}
778778

779779
STDMETHODIMP CteBase::ClientToWindow(int *pcx, int *pcy)
@@ -799,6 +799,9 @@ STDMETHODIMP CteBase::PutProperty(BSTR Property, VARIANT vtValue)
799799
STDMETHODIMP CteBase::GetProperty(BSTR Property, VARIANT *pvtValue)
800800
{
801801
if (lstrcmpi(Property, L"InvokeMethod") == 0) {
802+
if (!m_webviewWindow) {
803+
return E_NOINTERFACE;
804+
}
802805
BSTR bs = ::SysAllocString(L"_InvokeMethod();");
803806
m_webviewWindow->ExecuteScript(bs, this);
804807
teSysFreeString(&bs);
@@ -813,8 +816,12 @@ STDMETHODIMP CteBase::GetProperty(BSTR Property, VARIANT *pvtValue)
813816

814817
STDMETHODIMP CteBase::get_Name(BSTR *Name)
815818
{
816-
*Name = ::SysAllocStringLen(L"WebView2/", lstrlen(g_versionInfo) + 9);
817-
lstrcat(*Name, g_versionInfo);
819+
if (!g_versionInfo) {
820+
return E_NOINTERFACE;
821+
}
822+
int nLen = lstrlen(g_versionInfo);
823+
*Name = ::SysAllocStringLen(L"WebView2/", nLen + 9);
824+
StrNCpy(*Name + 9, g_versionInfo, nLen);
818825
return S_OK;
819826
}
820827

@@ -1217,6 +1224,9 @@ STDMETHODIMP CteBase::UIDeactivate(void)
12171224

12181225
STDMETHODIMP CteBase::SetObjectRects(LPCRECT lprcPosRect, LPCRECT lprcClipRect)
12191226
{
1227+
if (!m_webviewController) {
1228+
return E_NOINTERFACE;
1229+
}
12201230
RECT bounds;
12211231
if (!lprcPosRect) {
12221232
GetClientRect(m_hwndParent, &bounds);
@@ -1364,11 +1374,11 @@ STDMETHODIMP CteBase::QueryService(REFGUID guidService, REFIID riid, void **ppv)
13641374
{
13651375
if (IsEqualGUID(guidService, SID_TablacusObject)) {
13661376
*ppv = new CteObjectEx();
1367-
return S_OK;
1377+
return *ppv ? S_OK : E_OUTOFMEMORY;
13681378
}
13691379
if (IsEqualGUID(guidService, SID_TablacusArray)) {
13701380
*ppv = new CteArray();
1371-
return S_OK;
1381+
return *ppv ? S_OK : E_OUTOFMEMORY;
13721382
}
13731383
if (IsEqualIID(riid, IID_IShellBrowser)) {
13741384
return QueryInterface(riid, ppv);
@@ -1379,6 +1389,9 @@ STDMETHODIMP CteBase::QueryService(REFGUID guidService, REFIID riid, void **ppv)
13791389
//ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler
13801390
STDMETHODIMP CteBase::Invoke(HRESULT result, ICoreWebView2Environment *created_environment)
13811391
{
1392+
if (FAILED(result) || !created_environment) {
1393+
return result;
1394+
}
13821395
created_environment->CreateCoreWebView2Controller(m_hwndParent, this);
13831396
#ifdef USE_DRAGDROP
13841397
created_environment->QueryInterface(IID_PPV_ARGS(&m_webviewEnvironment3));
@@ -1389,6 +1402,9 @@ STDMETHODIMP CteBase::Invoke(HRESULT result, ICoreWebView2Environment *created_e
13891402
//ICoreWebView2CreateCoreWebView2ControllerCompletedHandler
13901403
STDMETHODIMP CteBase::Invoke(HRESULT result, ICoreWebView2Controller *createdController)
13911404
{
1405+
if (FAILED(result) || !createdController) {
1406+
return result;
1407+
}
13921408
createdController->QueryInterface(IID_PPV_ARGS(&m_webviewController));
13931409
m_webviewController->get_CoreWebView2(&m_webviewWindow);
13941410
ICoreWebView2Settings* Settings;
@@ -1398,6 +1414,7 @@ STDMETHODIMP CteBase::Invoke(HRESULT result, ICoreWebView2Controller *createdCon
13981414
Settings->put_AreDefaultScriptDialogsEnabled(TRUE);
13991415
Settings->put_IsWebMessageEnabled(TRUE);
14001416
Settings->put_IsStatusBarEnabled(FALSE);
1417+
SafeRelease(&Settings);
14011418
if (m_pOleClientSite) {
14021419
IDocHostUIHandler *pDocHostUIHandler;
14031420
if SUCCEEDED(m_pOleClientSite->QueryInterface(IID_PPV_ARGS(&pDocHostUIHandler))) {
@@ -1676,14 +1693,18 @@ STDMETHODIMP CteArray::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD
16761693
if (pVarResult) {
16771694
LONG l = 0;
16781695
::SafeArrayGetElement(m_psa, &l, pVarResult);
1696+
} else {
1697+
VARIANT vTmp;
1698+
LONG l = 0;
1699+
::SafeArrayGetElement(m_psa, &l, &vTmp);
1700+
::VariantClear(&vTmp);
16791701
}
16801702
VARIANT *pv;
16811703
if (::SafeArrayAccessData(m_psa, (LPVOID *)&pv) == S_OK) {
1682-
::VariantClear(pv);
1683-
::CopyMemory(pv, &pv[1], sizeof(VARIANT) * --n);
1684-
::VariantInit(&pv[n]);
1704+
::MoveMemory(pv, &pv[1], sizeof(VARIANT) * (n - 1));
1705+
::VariantInit(&pv[n - 1]);
16851706
::SafeArrayUnaccessData(m_psa);
1686-
SAFEARRAYBOUND sab = { (ULONG)n, 0 };
1707+
SAFEARRAYBOUND sab = { (ULONG)n - 1, 0 };
16871708
::SafeArrayRedim(m_psa, &sab);
16881709
}
16891710
}
@@ -1749,11 +1770,11 @@ STDMETHODIMP CteArray::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD
17491770

17501771
case TE_METHOD + 6://Slice
17511772
case TE_METHOD + 7://Splice
1752-
CteArray *pNewArray;
1753-
if (pVarResult) {
1754-
pNewArray = new CteArray();
1755-
}
17561773
if (nArg >= 0) {
1774+
CteArray *pNewArray = NULL;
1775+
if (pVarResult) {
1776+
pNewArray = new CteArray();
1777+
}
17571778
LONG nStart = GetIntFromVariant(&pDispParams->rgvarg[nArg]);
17581779
LONG nLen = nArg >= 1 ? GetIntFromVariant(&pDispParams->rgvarg[nArg - 1]) : MAXINT;
17591780
if (nStart > GetCount() - nLen) {
@@ -1787,6 +1808,8 @@ STDMETHODIMP CteArray::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD
17871808
sab = { (ULONG)n - nLen, 0 };
17881809
::SafeArrayRedim(m_psa, &sab);
17891810
}
1811+
} else if (pVarResult) {
1812+
teSetObjectRelease(pVarResult, new CteArray());
17901813
}
17911814
return S_OK;
17921815

@@ -1865,8 +1888,8 @@ STDMETHODIMP CteArray::GetMemberProperties(DISPID id, DWORD grfdexFetch, DWORD *
18651888
STDMETHODIMP CteArray::GetMemberName(DISPID id, BSTR *pbstrName)
18661889
{
18671890
if (id >= DISPID_COLLECTION_MIN && id < DISPID_COLLECTION_MIN + GetCount()) {
1868-
wchar_t pszName[8];
1869-
swprintf_s(pszName, 8, L"%d", id - DISPID_COLLECTION_MIN);
1891+
wchar_t pszName[16];
1892+
swprintf_s(pszName, 16, L"%d", id - DISPID_COLLECTION_MIN);
18701893
*pbstrName = ::SysAllocString(pszName);
18711894
return S_OK;
18721895
}
@@ -1973,8 +1996,11 @@ STDMETHODIMP CteObjectEx::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT c
19731996
auto itr = m_umIndex.find(*rgszNames);
19741997
if (itr == m_umIndex.end()) {
19751998
*rgDispId = m_dispId;
1999+
if (m_dispId >= TE_PROPERTY) {
2000+
return DISP_E_UNKNOWNNAME;
2001+
}
19762002
m_umIndex[*rgszNames] = m_dispId++;
1977-
return (m_dispId < TE_PROPERTY) ? S_OK : DISP_E_UNKNOWNNAME;
2003+
return S_OK;
19782004
}
19792005
*rgDispId = itr->second;
19802006
return S_OK;

0 commit comments

Comments
 (0)