diff options
author | nyamatongwe <unknown> | 2001-08-01 08:17:38 +0000 |
---|---|---|
committer | nyamatongwe <unknown> | 2001-08-01 08:17:38 +0000 |
commit | c70d4ffb6f1378b12eb4271bd8737c2931f12286 (patch) | |
tree | 4818fd14db37806bb711c9238dd2a4298ff89654 | |
parent | b0dcc83d5b42183956f59baa7806a5db68f20af0 (diff) | |
download | scintilla-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.cxx | 7 |
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; |