make the string properly 0 terminated and allow for one char more on the output buffer

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38639 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor 2006-04-09 12:51:03 +00:00
parent 2dcd83af91
commit 3281bf6779

View File

@ -504,19 +504,20 @@ pascal OSStatus wxMacUnicodeTextEventHandler( EventHandlerCallRef handler , Even
UniChar buf[2] ; UniChar buf[2] ;
if ( GetEventParameter( event, kEventParamTextInputSendText, typeUnicodeText, NULL, 0 , &dataSize, NULL ) == noErr ) if ( GetEventParameter( event, kEventParamTextInputSendText, typeUnicodeText, NULL, 0 , &dataSize, NULL ) == noErr )
{ {
numChars = dataSize / sizeof( UniChar) ; numChars = dataSize / sizeof( UniChar) + 1;
charBuf = buf ; charBuf = buf ;
if ( dataSize > sizeof(buf) ) if ( numChars * 2 > sizeof(buf) )
charBuf = new UniChar[ numChars ] ; charBuf = new UniChar[ numChars ] ;
else else
charBuf = buf ; charBuf = buf ;
uniChars = new wchar_t[ numChars ] ; uniChars = new wchar_t[ numChars ] ;
GetEventParameter( event, kEventParamTextInputSendText, typeUnicodeText, NULL, dataSize , NULL , charBuf ) ; GetEventParameter( event, kEventParamTextInputSendText, typeUnicodeText, NULL, dataSize , NULL , charBuf ) ;
charBuf[ numChars - 1 ] = 0;
#if SIZEOF_WCHAR_T == 2 #if SIZEOF_WCHAR_T == 2
uniChars = (wchar_t*) charBuf ; uniChars = (wchar_t*) charBuf ;
memcpy( uniChars , charBuf , dataSize ) ; memcpy( uniChars , charBuf , numChars * 2 ) ;
#else #else
// the resulting string will never have more chars than the utf16 version, so this is safe // the resulting string will never have more chars than the utf16 version, so this is safe
wxMBConvUTF16 converter ; wxMBConvUTF16 converter ;