[Bug 14539] New: RtlIsTextUnicode regression: ideographic space should not be used in check for reversed control chars

wine-bugs at winehq.org wine-bugs at winehq.org
Thu Jul 17 14:43:11 CDT 2008


http://bugs.winehq.org/show_bug.cgi?id=14539

           Summary: RtlIsTextUnicode regression: ideographic space should
                    not be used in check for reversed control chars
           Product: Wine
           Version: CVS/GIT
          Platform: PC
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: ntdll
        AssignedTo: wine-bugs at winehq.org
        ReportedBy: focht at gmx.net


Hello,

a regression in RtlIsTextUnicode causes VS.NET 2005 Installer and probably
others to fail.
The setup database, a unicode .ini file is not correctly identified as such.

--- snip ---
0026:Call setupapi.SetupOpenInfFileW(007eb3e8
L"E:\\vs\\setup\\setup.sdb",00000000,00000002,0033eab4) ret=5022237f
0026:Call KERNEL32.GetFullPathNameW(007eb3e8
L"E:\\vs\\setup\\setup.sdb",00000000,00000000,00000000) ret=606148a8
0026:Ret  KERNEL32.GetFullPathNameW() retval=00000016 ret=606148a8
0026:Call ntdll.RtlAllocateHeap(00110000,00000000,0000002c) ret=606148e0
0026:Ret  ntdll.RtlAllocateHeap() retval=00142a08 ret=606148e0
0026:Call KERNEL32.GetFullPathNameW(007eb3e8
L"E:\\vs\\setup\\setup.sdb",00000016,00142a08,00000000) ret=60614909
0026:Ret  KERNEL32.GetFullPathNameW() retval=00000015 ret=60614909
0026:Call KERNEL32.CreateFileW(00142a08
L"E:\\vs\\setup\\setup.sdb",80000000,00000001,00000000,00000003,00000000,00000000)
ret=60614947
0026:Ret  KERNEL32.CreateFileW() retval=00000068 ret=60614947
0026:Call KERNEL32.GetFileSize(00000068,00000000) ret=60614966
0026:Ret  KERNEL32.GetFileSize() retval=00012f9e ret=60614966
0026:Call
KERNEL32.CreateFileMappingW(00000068,00000000,00000002,00000000,00012f9e,00000000)
ret=6061499b
0026:Ret  KERNEL32.CreateFileMappingW() retval=0000006c ret=6061499b
0026:Call KERNEL32.MapViewOfFile(0000006c,00000004,00000000,00000000,00012f9e)
ret=60614a2f
0026:Ret  KERNEL32.MapViewOfFile() retval=003b0000 ret=60614a2f
0026:Call ntdll.NtClose(0000006c) ret=60614a3d
0026:Ret  ntdll.NtClose() retval=00000000 ret=60614a3d
0026:Call ntdll.RtlAllocateHeap(00110000,00000008,0000002c) ret=60614a80
0026:Ret  ntdll.RtlAllocateHeap() retval=00142a40 ret=60614a80
0026:Call ntdll.RtlAllocateHeap(00110000,00000000,00025f3c) ret=60614ab3
0026:Ret  ntdll.RtlAllocateHeap() retval=00147ab8 ret=60614ab3
0026:Call ntdll.RtlIsTextUnicode(003b0000,00012f9e,00000000) ret=60614ae8
0026:Ret  ntdll.RtlIsTextUnicode() retval=00000000 ret=60614ae8
0026:Call ntdll.RtlAllocateHeap(00110000,00000000,00025f3c) ret=60614b2b
0026:Ret  ntdll.RtlAllocateHeap() retval=0016da00 ret=60614b2b
0026:Call KERNEL32.MultiByteToWideChar(00000000,00000000,003b0000
"\xff\xfe\r",00012f9e,0016da00,00012f9e) ret=60614b6f
0026:Ret  KERNEL32.MultiByteToWideChar() retval=00012f9e ret=60614b6f
0026:Call ntdll.RtlReAllocateHeap(00110000,00000010,00147ab8,00000000)
ret=606145d9
0026:Ret  ntdll.RtlReAllocateHeap() retval=00147ab8 ret=606145d9
0026:Call ntdll.RtlFreeHeap(00110000,00000000,0016da00) ret=60614ba9
0026:Ret  ntdll.RtlFreeHeap() retval=00000001 ret=60614ba9
0026:Call KERNEL32.UnmapViewOfFile(003b0000) ret=60614bc2
0026:Ret  KERNEL32.UnmapViewOfFile() retval=00000001 ret=60614bc2
0026:Call ntdll.RtlFreeHeap(00110000,00000000,00142a40) ret=60614be5
0026:Ret  ntdll.RtlFreeHeap() retval=00000001 ret=60614be5
0026:Call KERNEL32.CloseHandle(00000068) ret=606149af
0026:Ret  KERNEL32.CloseHandle() retval=00000001 ret=606149af
0026:Call ntdll.RtlFreeHeap(00110000,00000000,00142a08) ret=606149d2
0026:Ret  ntdll.RtlFreeHeap() retval=00000001 ret=606149d2
0026:Ret  setupapi.SetupOpenInfFileW() retval=ffffffff ret=5022237f
..
0026:Call KERNEL32.WritePrivateProfileStringW(501b82fc L"Error",0033ed28
L"Error1",007ebbe8 L"0:0:setup.exe:LoadSetupDatabase() : The .sdb file is
either missing, corrupt, or the signiture portion is missing",0033eb14
L"C:\\windows\\temp\\msinterr.txt") ret=501fcdeb
--- snip ---

The input data for your pleasure:

--- snip ---
$ hexdump -n 256 -C setup.sdb 
00000000  ff fe 0d 00 0a 00 5b 00  56 00 65 00 72 00 73 00  |......[.V.e.r.s.|
00000010  69 00 6f 00 6e 00 5d 00  0d 00 0a 00 53 00 69 00  |i.o.n.].....S.i.|
00000020  67 00 6e 00 61 00 74 00  75 00 72 00 65 00 20 00  |g.n.a.t.u.r.e. .|
00000030  3d 00 20 00 22 00 24 00  57 00 69 00 6e 00 64 00  |=. .".$.W.i.n.d.|
00000040  6f 00 77 00 73 00 20 00  4e 00 54 00 24 00 22 00  |o.w.s. .N.T.$.".|
00000050  0d 00 0a 00 50 00 72 00  6f 00 76 00 69 00 64 00  |....P.r.o.v.i.d.|
00000060  65 00 72 00 3d 00 22 00  4d 00 69 00 63 00 72 00  |e.r.=.".M.i.c.r.|
00000070  6f 00 73 00 6f 00 66 00  74 00 20 00 56 00 69 00  |o.s.o.f.t. .V.i.|
00000080  73 00 75 00 61 00 6c 00  20 00 53 00 74 00 75 00  |s.u.a.l. .S.t.u.|
00000090  64 00 69 00 6f 00 20 00  32 00 30 00 30 00 35 00  |d.i.o. .2.0.0.5.|
000000a0  20 00 50 00 72 00 6f 00  66 00 65 00 73 00 73 00  | .P.r.o.f.e.s.s.|
000000b0  69 00 6f 00 6e 00 61 00  6c 00 20 00 45 00 64 00  |i.o.n.a.l. .E.d.|
000000c0  69 00 74 00 69 00 6f 00  6e 00 20 00 2d 00 20 00  |i.t.i.o.n. .-. .|
000000d0  45 00 4e 00 55 00 22 00  0d 00 0a 00 56 00 65 00  |E.N.U.".....V.e.|
000000e0  72 00 73 00 69 00 6f 00  6e 00 3d 00 38 00 30 00  |r.s.i.o.n.=.8.0.|
000000f0  30 00 2e 00 31 00 30 00  30 00 2e 00 30 00 30 00  |0...1.0.0...0.0.|
--- snip ---

BOM for UTF-16 is there.
The problem is the ideographic space (U+3000) in reverse control chars check
(punctuation symbol or whitespace in languages like Chinese, Japanese, or
Korean).

--- snip ---
static const WCHAR byterev_control_chars[] =
{0x0d00,0x0a00,0x0900,0x2000,0x0030,0}; 
--- snip ---

This clashes with the multibyte mapping of digit 0: 0x30 -> 0x0030

By removing the reversed ideographic space, the file is correctly recognized.

Problematic commit: 8f3ae2011c39d092b0c8e2e6a9aabddbd2596748

Regards


-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the wine-bugs mailing list