[PATCH v3 2/7] ntdll: Provide some Unicode helpers for Unix libs.

Jacek Caban jacek at codeweavers.com
Wed Oct 6 08:53:53 CDT 2021


Hi Huw,

On 06/10/2021 15:12, Huw Davies wrote:
> On Wed, Oct 06, 2021 at 12:57:04PM +0200, Jacek Caban wrote:
>> Signed-off-by: Jacek Caban <jacek at codeweavers.com>
>> ---
>>   dlls/ntdll/unix/env.c | 98 ++++++++++++++++++++++++++++++-------------
>>   1 file changed, 69 insertions(+), 29 deletions(-)
> Hi Jacek,
>
> This is giving me random crashes on (32-bit) macOS, e.g.:
>
> tools/runtest -q -P wine -T . -M gdi32.dll -p dlls/gdi32/tests/gdi32_test.exe brush && touch dlls/gdi32/tests/brush.ok
> /bin/sh: line 1: 59187 Segmentation fault: 11  tools/runtest -q -P wine -T . -M gdi32.dll -p dlls/gdi32/tests/gdi32_test.exe brush


I think I can see the problem, the attached patch should help. I will do 
more testing and send an updated patch.


Thanks,

Jacek

-------------- next part --------------
diff --git a/dlls/ntdll/unix/env.c b/dlls/ntdll/unix/env.c
index 52736344078..13bf85d2eb6 100644
--- a/dlls/ntdll/unix/env.c
+++ b/dlls/ntdll/unix/env.c
@@ -644,10 +644,11 @@ DWORD ntdll_umbstowcs( const char *src, DWORD srclen, WCHAR *dst, DWORD dstlen )
     }
     else  /* utf-8 */
     {
+        reslen = 0;
         RtlUTF8ToUnicodeN( dst, dstlen * sizeof(WCHAR), &reslen, src, srclen );
         reslen /= sizeof(WCHAR);
 #ifdef __APPLE__  /* work around broken Mac OS X filesystem that enforces NFD */
-        if (reslen && nfc_table) reslen = compose_string( nfc_table, dst - reslen, reslen );
+        if (reslen && nfc_table) reslen = compose_string( nfc_table, dst, reslen );
 #endif
     }
     return reslen;


More information about the wine-devel mailing list