From 288a301b975ef890b7a84e17d5758b6999201100 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Va=CC=81clav=20Slavi=CC=81k?= Date: Sun, 29 Jan 2017 13:55:56 +0100 Subject: [PATCH] Don't corrupt pasted UTF-16 text in wxOSX Fix breakage introduced by 587067bc684c0a7619a5ca0ec99ca40afa9c6a1b: pasting text could mangle some Unicode characters if it was in UTF-16. The code in that commit converted newlines all right, but it also converted _any_ occurrence of 0x0d to 0x0a, which wasn't very Unicode friendly. Fixed by partially reverting the change and adding a dedicated UTF-16 variant of wxMacConvertNewlines13To10() instead. --- include/wx/osx/core/cfstring.h | 2 +- src/osx/carbon/dataobj.cpp | 8 ++++++-- src/osx/core/cfstring.cpp | 4 ++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/include/wx/osx/core/cfstring.h b/include/wx/osx/core/cfstring.h index fad01b88d4..372a3c7978 100644 --- a/include/wx/osx/core/cfstring.h +++ b/include/wx/osx/core/cfstring.h @@ -30,7 +30,7 @@ WXDLLIMPEXP_BASE void wxMacConvertNewlines13To10( wxString *data ) ; WXDLLIMPEXP_BASE void wxMacConvertNewlines10To13( wxString *data ) ; WXDLLIMPEXP_BASE void wxMacConvertNewlines13To10( char * data ) ; -WXDLLIMPEXP_BASE void wxMacConvertNewlines13To10( char * data, size_t len ) ; +WXDLLIMPEXP_BASE void wxMacConvertNewlines13To10( wxChar16 * data ) ; WXDLLIMPEXP_BASE void wxMacConvertNewlines10To13( char * data ) ; WXDLLIMPEXP_BASE wxUint32 wxMacGetSystemEncFromFontEnc(wxFontEncoding encoding) ; diff --git a/src/osx/carbon/dataobj.cpp b/src/osx/carbon/dataobj.cpp index f6967ddbba..eac1fb9106 100644 --- a/src/osx/carbon/dataobj.cpp +++ b/src/osx/carbon/dataobj.cpp @@ -487,9 +487,13 @@ bool wxDataObject::GetFromPasteboard( void * pb ) memset( buf, 0, flavorDataSize + 4 ); memcpy( buf, CFDataGetBytePtr( flavorData ), flavorDataSize ); - if (dataFormat.GetType() == wxDF_TEXT || dataFormat.GetType() == wxDF_UNICODETEXT) + if (dataFormat.GetType() == wxDF_TEXT) { - wxMacConvertNewlines13To10( (char*) buf, flavorDataSize ); + wxMacConvertNewlines13To10((char*) buf); + } + else if (dataFormat.GetType() == wxDF_UNICODETEXT) + { + wxMacConvertNewlines13To10((wxChar16*) buf); } SetData( flavorFormat, flavorDataSize, buf ); transferred = true; diff --git a/src/osx/core/cfstring.cpp b/src/osx/core/cfstring.cpp index f44be612aa..c25dc9d8d5 100644 --- a/src/osx/core/cfstring.cpp +++ b/src/osx/core/cfstring.cpp @@ -34,9 +34,9 @@ void wxMacConvertNewlines13To10( char * data ) } } -void wxMacConvertNewlines13To10( char * data, size_t len ) +void wxMacConvertNewlines13To10( wxChar16 * data ) { - for ( ; len; ++data, --len ) + for ( ; *data; ++data ) { if ( *data == 0x0d ) *data = 0x0a;