check that the conversion really succeeds even when wxMBConv_win32::WC2MB() is called with NULL buffer
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48643 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -2426,26 +2426,36 @@ public:
|
|||||||
return wxCONV_FAILED;
|
return wxCONV_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we were really converting, check if we succeeded
|
// we did something, check if we really succeeded
|
||||||
if ( buf )
|
if ( flags )
|
||||||
{
|
{
|
||||||
if ( flags )
|
// check if the conversion failed, i.e. if any replacements
|
||||||
|
// were done
|
||||||
|
if ( usedDef )
|
||||||
|
return wxCONV_FAILED;
|
||||||
|
}
|
||||||
|
else // we must resort to double tripping...
|
||||||
|
{
|
||||||
|
// first we need to ensure that we really have the MB data: this is
|
||||||
|
// not the case if we're called with NULL buffer, in which case we
|
||||||
|
// need to do the conversion yet again
|
||||||
|
wxCharBuffer bufDef;
|
||||||
|
if ( !buf )
|
||||||
{
|
{
|
||||||
// check if the conversion failed, i.e. if any replacements
|
bufDef = wxCharBuffer(len);
|
||||||
// were done
|
buf = bufDef.data();
|
||||||
if ( usedDef )
|
if ( !::WideCharToMultiByte(m_CodePage, flags, pwz, -1,
|
||||||
|
buf, len, NULL, NULL) )
|
||||||
return wxCONV_FAILED;
|
return wxCONV_FAILED;
|
||||||
}
|
}
|
||||||
else // we must resort to double tripping...
|
|
||||||
|
wxWCharBuffer wcBuf(n);
|
||||||
|
if ( MB2WC(wcBuf.data(), buf, n) == wxCONV_FAILED ||
|
||||||
|
wcscmp(wcBuf, pwz) != 0 )
|
||||||
{
|
{
|
||||||
wxWCharBuffer wcBuf(n);
|
// we didn't obtain the same thing we started from, hence
|
||||||
if ( MB2WC(wcBuf.data(), buf, n) == wxCONV_FAILED ||
|
// the conversion was lossy and we consider that it failed
|
||||||
wcscmp(wcBuf, pwz) != 0 )
|
return wxCONV_FAILED;
|
||||||
{
|
|
||||||
// we didn't obtain the same thing we started from, hence
|
|
||||||
// the conversion was lossy and we consider that it failed
|
|
||||||
return wxCONV_FAILED;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user