aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornyamatongwe <unknown>2001-08-01 08:17:38 +0000
committernyamatongwe <unknown>2001-08-01 08:17:38 +0000
commitc70d4ffb6f1378b12eb4271bd8737c2931f12286 (patch)
tree4818fd14db37806bb711c9238dd2a4298ff89654
parentb0dcc83d5b42183956f59baa7806a5db68f20af0 (diff)
downloadscintilla-mirror-c70d4ffb6f1378b12eb4271bd8737c2931f12286.tar.gz
Use separate variable to remember if allocation occurred to avoid using
dangling pointer and upsetting BoundsChecker.
-rw-r--r--win32/ScintillaWin.cxx7
1 files changed, 4 insertions, 3 deletions
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx
index 85c795ac5..c9cad5cd0 100644
--- a/win32/ScintillaWin.cxx
+++ b/win32/ScintillaWin.cxx
@@ -1544,20 +1544,21 @@ STDMETHODIMP ScintillaWin::Drop(LPDATAOBJECT pIDataSource, DWORD grfKeyState,
STGMEDIUM medium={0,{0},0};
HRESULT hr = S_OK;
- wchar_t *udata = 0;
char *data = 0;
+ bool dataAllocated = false;
if (IsUnicodeMode()) {
FORMATETC fmtu = {CF_UNICODETEXT, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
hr = pIDataSource->GetData(&fmtu, &medium);
if (SUCCEEDED(hr) && medium.hGlobal) {
- udata = static_cast<wchar_t *>(::GlobalLock(medium.hGlobal));
+ wchar_t *udata = static_cast<wchar_t *>(::GlobalLock(medium.hGlobal));
int tlen = ::GlobalSize(medium.hGlobal);
// Convert UCS-2 to UTF-8
int dataLen = UTF8Length(udata, tlen/2);
data = new char[dataLen+1];
if (data) {
UTF8FromUCS2(udata, tlen/2, data, dataLen);
+ dataAllocated = true;
}
}
}
@@ -1592,7 +1593,7 @@ STDMETHODIMP ScintillaWin::Drop(LPDATAOBJECT pIDataSource, DWORD grfKeyState,
else
::GlobalFree(medium.hGlobal);
- if (udata)
+ if (dataAllocated)
delete []data;
return S_OK;