Optimized return is valid even after the CharEncConv object is destroyed
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6415 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
bb9b88b70f
commit
1e55e30ff4
2 changed files with 7 additions and 1 deletions
|
@ -154,6 +154,7 @@ void* CharEncConv::Convert(const void*Src, size_t cbSrc, size_t*cbOut)
|
|||
** Returns a pointer to the buffer on success or 0 on error.
|
||||
** The buffer is valid until you call Close() or Convert().
|
||||
*/
|
||||
m_OptimizedReturn = false;
|
||||
if ((size_t)-1 == cbSrc)
|
||||
{
|
||||
UINT cus = IsWE(m_FE) ? sizeof(wchar_t) : NStreamEncoding::GetCodeUnitSize(m_FE);
|
||||
|
@ -184,6 +185,7 @@ void* CharEncConv::Convert(const void*Src, size_t cbSrc, size_t*cbOut)
|
|||
if (cbSrc && ((WORD*)Src)[--cbSrc]) ++cbSrc;
|
||||
*cbOut = cbSrc * sizeof(wchar_t);
|
||||
}
|
||||
m_OptimizedReturn = true;
|
||||
return (void*) (m_Result = (char*) Src);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -103,6 +103,7 @@ class CharEncConv {
|
|||
WORD m_TE, m_FE;
|
||||
#ifdef _WIN32
|
||||
bool m_AllowOptimizedReturn; // Can Convert() return Src buffer?
|
||||
bool m_OptimizedReturn;
|
||||
#else
|
||||
iconvdescriptor m_iconvd;
|
||||
#endif
|
||||
|
@ -115,7 +116,10 @@ public:
|
|||
~CharEncConv() { Close(); }
|
||||
void Close()
|
||||
{
|
||||
free(m_Result);
|
||||
#ifdef _WIN32
|
||||
if (!m_OptimizedReturn)
|
||||
#endif
|
||||
free(m_Result);
|
||||
m_Result = 0;
|
||||
#ifndef _WIN32
|
||||
m_iconvd.Close();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue