https://bugs.winehq.org/show_bug.cgi?id=48487
Bug ID: 48487 Summary: MSYS based Git 2.25 installer reports 'could not decode hex <hexstring>' (needs support for CryptStringToBinaryW CRYPT_STRING_HEX) Product: Wine Version: 5.0-rc6 Hardware: x86-64 OS: Linux Status: NEW Severity: normal Priority: P2 Component: crypt32 Assignee: wine-bugs@winehq.org Reporter: focht@gmx.net Distribution: ---
Hello folks,
as it says. The error message pops up a number of times and can be dismissed.
Download:
https://github.com/git-for-windows/git/releases/tag/v2.25.0.windows.1
--- snip --- $ WINEDEBUG=+seh,+relay,+cmd,+crypt wine ./Git-2.25.0-32-bit.exe >>log.txt 2>&1 ... 005b:Call KERNEL32.CreateProcessW(00000000,00f822ec L""C:\users\focht\Temp\is-79D9L.tmp\Git-2.25.0-32-bit.tmp" /SL5="$70062,45991292,224256,Z:\home\focht\Downloads\Git-2.25.0-32-bit.exe" ",00000000,00000000,00000000,00000000,00000000,00000000,0032fe54,0032fe44) ret=0040ebdd ... 005b:Ret KERNEL32.CreateProcessW() retval=00000001 ret=0040ebdd ... 005d:Call KERNEL32.CreateFileW(019bc684 L"C:\Program Files (x86)\Git\dev\fd",c0000000,00000000,00000000,00000002,00000080,00000000) ret=0042643d 005d:Call ntdll._wcsicmp(019bc684 L"C:\Program Files (x86)\Git\dev\fd",7b05c3f6 L"CONIN$") ret=7b00f02f 005d:Ret ntdll._wcsicmp() retval=ffffffcb ret=7b00f02f 005d:Call ntdll._wcsicmp(019bc684 L"C:\Program Files (x86)\Git\dev\fd",7b05c404 L"CONOUT$") ret=7b00f045 005d:Ret ntdll._wcsicmp() retval=ffffffcb ret=7b00f045 005d:Call ntdll.wcsncmp(019bc684 L"C:\Program Files (x86)\Git\dev\fd",7b05c328 L"\\.\",00000004) ret=7b00f05d 005d:Ret ntdll.wcsncmp() retval=ffffffe7 ret=7b00f05d 005d:Call ntdll.RtlIsDosDeviceName_U(019bc684 L"C:\Program Files (x86)\Git\dev\fd") ret=7b00f06f 005d:Ret ntdll.RtlIsDosDeviceName_U() retval=00000000 ret=7b00f06f 005d:Call ntdll.RtlDosPathNameToNtPathName_U(019bc684 L"C:\Program Files (x86)\Git\dev\fd",0032ee14,00000000,00000000) ret=7b00f1b3 005d:Ret ntdll.RtlDosPathNameToNtPathName_U() retval=00000001 ret=7b00f1b3 005d:Call ntdll.NtCreateFile(0032ee24,c0100080,0032edfc,0032edf4,00000000,00000080,00000000,00000005,00000060,00000000,00000000) ret=7b00f2a6 005d:Ret ntdll.NtCreateFile() retval=00000000 ret=7b00f2a6 005d:Call ntdll.RtlFreeUnicodeString(0032ee14) ret=7b00f3bb 005d:Ret ntdll.RtlFreeUnicodeString() retval=019bc684 ret=7b00f3bb 005d:Ret KERNEL32.CreateFileW() retval=000000c0 ret=0042643d 005d:Call crypt32.CryptStringToBinaryW(01348e5c L"213c73796d6c696e6b3efffe2f00700072006f0063002f00730065006c0066002f00660064000000",00000050,00000004,019c65b4,0165d4cc,00000000,00000000) ret=00499fca 005d:Call KERNEL32.IsBadStringPtrW(01348e5c,00000050) ret=7c332f9f 005d:Ret KERNEL32.IsBadStringPtrW() retval=00000000 ret=7c332f9f 005d:trace:crypt:CryptStringToBinaryW (L"213c73796d6c696e6b3efffe2f00700072006f0063002f00730065006c0066002f00660064000000", 80, 00000004, 0x19c65b4, 0x165d4cc, (nil), (nil)) 005d:fixme:crypt:CryptStringToBinaryW Unimplemented type 4 005d:Ret crypt32.CryptStringToBinaryW() retval=00000000 ret=00499fca 005d:Call KERNEL32.GetLastError() ret=004a1f1e 005d:Ret KERNEL32.GetLastError() retval=00000057 ret=004a1f1e 005d:Call KERNEL32.RaiseException(0eedfade,00000001,00000007,0032f064) ret=004fa043 005d:Call ntdll.memcpy(0032efd8,0032f064,0000001c) ret=7b00daa1 005d:Ret ntdll.memcpy() retval=0032efd8 ret=7b00daa1 005d:trace:seh:raise_exception code=eedfade flags=1 addr=0x7b00dab1 ip=7b00dab1 tid=005d 005d:trace:seh:raise_exception info[0]=004fa043 005d:trace:seh:raise_exception info[1]=01686200 005d:trace:seh:raise_exception info[2]=013f4c70 005d:trace:seh:raise_exception info[3]=013f0350 005d:trace:seh:raise_exception info[4]=00000018 005d:trace:seh:raise_exception info[5]=0032f120 005d:trace:seh:raise_exception info[6]=0032f080 005d:trace:seh:raise_exception eax=0032efc4 ebx=013f4c70 ecx=0032f064 edx=0032efc4 esi=00000007 edi=0032f030 005d:trace:seh:raise_exception ebp=0032f018 esp=0032efc4 cs=320023 ds=ffff002b es=002b fs=55110063 gs=006b flags=00000212 005d:trace:seh:call_stack_handlers calling handler at 0x4fa44f code=eedfade flags=1 005d:trace:seh:call_stack_handlers handler at 0x4fa44f returned 1 005d:trace:seh:call_stack_handlers calling handler at 0x494d53 code=eedfade flags=1 ... 005d:Call user32.MessageBoxW(000200c2,01341d0c L"Could not write "C:\Program Files (x86)\Git\dev\fd" could not decode hex 213c73796d6c696e6b3efffe2f00700072006f0063002f00730065006c0066002f00660064000000",01413a94 L"Git 2.25.0 Setup",00000030) ret=0047ca0a --- snip ---
The script source is here:
https://github.com/git-for-windows/build-extra/blob/3c00b55dd02a3df50ee157d1...
--- snip --- function CreateCygwinSymlink(SymlinkPath,TargetPath:String):Boolean; var Attribute:DWord; i:Integer; Hex,Buffer:string; Stream:TStream; Size:LongWord; begin Result:=True; // assuming that the target is actually all-ASCII, convert to UTF-16 for i:=Length(TargetPath) downto 1 do
TargetPath:=Copy(TargetPath,1,i)+#0+Copy(TargetPath,i+1,Length(TargetPath)-i); Hex:='213c73796d6c696e6b3efffe'; // "!<symlink>\xff\xfe" for i:=1 to Length(TargetPath) do Hex:=Hex+CharToHex(Ord(TargetPath[i])); // append wide characters as hex Hex:=Hex+'0000'; // append a wide NUL // write the file Stream:=TFileStream.Create(SymlinkPath,fmCreate); try Size:=Length(Hex) div 2; SetLength(Buffer,Size); if (CryptStringToBinary(Hex,Length(Hex),CRYPT_STRING_HEX,Buffer,Size,0,0)=0) or (Size<>Length(Hex) div 2) then RaiseException('could not decode hex '+Hex); Stream.WriteBuffer(Buffer,Size); except LogError('Could not write "'+SymlinkPath+'" '+GetExceptionMessage()); Result:=False; finally Stream.Free end; // Set system bit (required for Cygwin to interpret this as a symlink) Attribute:=GetFileAttributes(SymlinkPath); if (Attribute and 4) = 0 then begin Attribute:=Attribute or 4; if not SetFileAttributes(SymlinkPath,Attribute) then begin LogError('Could not mark "'+SymlinkPath+'" as system file'); Result:=False; end; end; end; --- snip ---
Wine source:
https://source.winehq.org/git/wine.git/blob/02f3a133b64ed1f979309e1399738eaa...
--- snip --- 990 BOOL WINAPI CryptStringToBinaryW(LPCWSTR pszString, 991 DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary, 992 DWORD *pdwSkip, DWORD *pdwFlags) 993 { 994 StringToBinaryWFunc decoder; 995 LONG ret; 996 997 TRACE("(%s, %d, %08x, %p, %p, %p, %p)\n", debugstr_wn(pszString, cchString ? cchString : -1), 998 cchString, dwFlags, pbBinary, pcbBinary, pdwSkip, pdwFlags); 999 1000 if (!pszString) 1001 { 1002 SetLastError(ERROR_INVALID_PARAMETER); 1003 return FALSE; 1004 } 1005 /* Only the bottom byte contains valid types */ 1006 if (dwFlags & 0xfffffff0) 1007 { 1008 SetLastError(ERROR_INVALID_DATA); 1009 return FALSE; 1010 } 1011 switch (dwFlags) 1012 { 1013 case CRYPT_STRING_BASE64_ANY: 1014 decoder = Base64AnyToBinaryW; 1015 break; 1016 case CRYPT_STRING_BASE64: 1017 decoder = Base64ToBinaryW; 1018 break; 1019 case CRYPT_STRING_BASE64HEADER: 1020 decoder = Base64HeaderToBinaryW; 1021 break; 1022 case CRYPT_STRING_BASE64REQUESTHEADER: 1023 decoder = Base64RequestHeaderToBinaryW; 1024 break; 1025 case CRYPT_STRING_BASE64X509CRLHEADER: 1026 decoder = Base64X509HeaderToBinaryW; 1027 break; 1028 case CRYPT_STRING_BINARY: 1029 decoder = DecodeBinaryToBinaryW; 1030 break; 1031 case CRYPT_STRING_ANY: 1032 decoder = DecodeAnyW; 1033 break; 1034 case CRYPT_STRING_HEX: 1035 case CRYPT_STRING_HEXASCII: 1036 case CRYPT_STRING_HEXADDR: 1037 case CRYPT_STRING_HEXASCIIADDR: 1038 FIXME("Unimplemented type %d\n", dwFlags & 0x7fffffff); 1039 /* fall through */ 1040 default: 1041 SetLastError(ERROR_INVALID_PARAMETER); 1042 return FALSE; 1043 } 1044 if (!cchString) 1045 cchString = strlenW(pszString); 1046 ret = decoder(pszString, cchString, pbBinary, pcbBinary, pdwSkip, pdwFlags); 1047 if (ret) 1048 SetLastError(ret); 1049 return ret == ERROR_SUCCESS; 1050 } --- snip ---
Microsoft docs:
https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryp...
$ sha1sum Git-2.25.0-32-bit.exe 7dc64019c089d4a9a3700ee7140a7af9a5416199 Git-2.25.0-32-bit.exe
$ du -sh Git-2.25.0-32-bit.exe 45M Git-2.25.0-32-bit.exe
$ wine --version wine-5.0-rc6
Regards
https://bugs.winehq.org/show_bug.cgi?id=48487
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |download, Installer URL| |https://github.com/git-for- | |windows/git/releases/downlo | |ad/v2.25.0.windows.1/Git-2. | |25.0-32-bit.exe
https://bugs.winehq.org/show_bug.cgi?id=48487
Aaro Altonen a.altonen@hotmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |a.altonen@hotmail.com
--- Comment #1 from Aaro Altonen a.altonen@hotmail.com --- patch sent: https://source.winehq.org/patches/data/182108
https://bugs.winehq.org/show_bug.cgi?id=48487
winetest@luukku.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |winetest@luukku.com
--- Comment #2 from winetest@luukku.com --- (In reply to Aaro Altonen from comment #1)
patch sent: https://source.winehq.org/patches/data/182108
it never got merged? I am using wine 5.21 and could still see the issue.
Please add patch keyword.
https://bugs.winehq.org/show_bug.cgi?id=48487
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- URL|https://github.com/git-for- |https://web.archive.org/web |windows/git/releases/downlo |/20200207000132/https://git |ad/v2.25.0.windows.1/Git-2. |hub.com/git-for-windows/git |25.0-32-bit.exe |/releases/download/v2.25.0. | |windows.1/Git-2.25.0-32-bit | |.exe Keywords| |patch
--- Comment #3 from Anastasius Focht focht@gmx.net --- Hello folks,
adding stable link via Internet Archive:
https://web.archive.org/web/20200207000132/https://github.com/git-for-window...
You need to wait a few seconds if it says "Got an HTTP 302 response at crawl time". It will still resolve to the artifact snapshot.
$ wine --version wine-6.0-rc6
Regards
https://bugs.winehq.org/show_bug.cgi?id=48487
Gijs Vermeulen gijsvrm@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |AlvinSeville7cf@gmail.com
--- Comment #4 from Gijs Vermeulen gijsvrm@gmail.com --- *** Bug 51397 has been marked as a duplicate of this bug. ***
https://bugs.winehq.org/show_bug.cgi?id=48487
Paul Gofman pgofman@codeweavers.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |pgofman@codeweavers.com
--- Comment #5 from Paul Gofman pgofman@codeweavers.com --- This is implemented by commit 1120a1cb2951964f3b9f8467a0e34d3f2faf6bc2.
https://bugs.winehq.org/show_bug.cgi?id=48487
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |FIXED Fixed by SHA1| |1120a1cb2951964f3b9f8467a0e | |34d3f2faf6bc2 Status|NEW |RESOLVED
--- Comment #6 from Anastasius Focht focht@gmx.net --- Hello folks,
I can confirm this is fixed by commit https://source.winehq.org/git/wine.git/commitdiff/1120a1cb2951964f3b9f8467a0... ("crypt32: Support CRYPT_STRING_HEX in CryptStringToBinary().").
Thanks Paul
--- snip --- ... 0134:Call KERNEL32.CreateFileW(031dc684 L"C:\Program Files (x86)\Git\dev\fd",c0000000,00000000,00000000,00000002,00000080,00000000) ret=0042643d ... 0134:Ret KERNEL32.CreateFileW() retval=000000a8 ret=0042643d 0134:Call crypt32.CryptStringToBinaryW(02b5334c L"213c73796d6c696e6b3efffe2f00700072006f0063002f00730065006c0066002f00660064000000",00000050,00000004,031e65b4,02e7d4cc,00000000,00000000) ret=00499fca ... 0134:Ret crypt32.CryptStringToBinaryW() retval=00000001 ret=00499fca ... 0134:Call crypt32.CryptStringToBinaryW(030a950c L"213c73796d6c696e6b3efffe2f00700072006f0063002f00730065006c0066002f00660064002f0030000000",00000058,00000004,02f7478c,02e7d4cc,00000000,00000000) ret=00499fca 0134:Call KERNEL32.IsBadStringPtrW(030a950c,00000058) ret=03214f24 0134:Ret KERNEL32.IsBadStringPtrW() retval=00000000 ret=03214f24 0134:trace:crypt:CryptStringToBinaryW (L"213c73796d6c696e6b3efffe2f00700072006f0063002f00730065006c0066002f00660064002f0030000000", 88, 00000004, 02F7478C, 02E7D4CC, 00000000, 00000000) 0134:Call ucrtbase.towlower(00000063) ret=03214dd8 0134:Ret ucrtbase.towlower() retval=00000063 ret=03214dd8 0134:Call ucrtbase.towlower(00000064) ret=03214dd8 0134:Ret ucrtbase.towlower() retval=00000064 ret=03214dd8 0134:Call ucrtbase.towlower(00000063) ret=03214dd8 0134:Ret ucrtbase.towlower() retval=00000063 ret=03214dd8 0134:Call ucrtbase.towlower(00000065) ret=03214dd8 0134:Ret ucrtbase.towlower() retval=00000065 ret=03214dd8 0134:Call ucrtbase.towlower(00000062) ret=03214dd8 0134:Ret ucrtbase.towlower() retval=00000062 ret=03214dd8 0134:Call ucrtbase.towlower(00000065) ret=03214dd8 0134:Ret ucrtbase.towlower() retval=00000065 ret=03214dd8 0134:Call ucrtbase.towlower(00000066) ret=03214d6d 0134:Ret ucrtbase.towlower() retval=00000066 ret=03214d6d 0134:Call ucrtbase.towlower(00000066) ret=03214dd8 0134:Ret ucrtbase.towlower() retval=00000066 ret=03214dd8 0134:Call ucrtbase.towlower(00000066) ret=03214d6d 0134:Ret ucrtbase.towlower() retval=00000066 ret=03214d6d 0134:Call ucrtbase.towlower(00000065) ret=03214dd8 0134:Ret ucrtbase.towlower() retval=00000065 ret=03214dd8 0134:Call ucrtbase.towlower(00000066) ret=03214dd8 0134:Ret ucrtbase.towlower() retval=00000066 ret=03214dd8 0134:Call ucrtbase.towlower(00000066) ret=03214dd8 0134:Ret ucrtbase.towlower() retval=00000066 ret=03214dd8 0134:Call ucrtbase.towlower(00000066) ret=03214dd8 0134:Ret ucrtbase.towlower() retval=00000066 ret=03214dd8 0134:Call ucrtbase.towlower(00000063) ret=03214dd8 0134:Ret ucrtbase.towlower() retval=00000063 ret=03214dd8 0134:Call ucrtbase.towlower(00000066) ret=03214dd8 0134:Ret ucrtbase.towlower() retval=00000066 ret=03214dd8 0134:Call ucrtbase.towlower(00000066) ret=03214dd8 0134:Ret ucrtbase.towlower() retval=00000066 ret=03214dd8 0134:Call ucrtbase.towlower(00000000) ret=03214d6d 0134:Ret ucrtbase.towlower() retval=00000000 ret=03214d6d 0134:Ret crypt32.CryptStringToBinaryW() retval=00000001 ret=00499fca 0134:Call KERNEL32.GetLastError() ret=004a1f1e 0134:Ret KERNEL32.GetLastError() retval=00000000 ret=004a1f1e ... --- snip ---
$ wine --version wine-7.17-215-ge2a5bf7540a
Regards
https://bugs.winehq.org/show_bug.cgi?id=48487
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #7 from Alexandre Julliard julliard@winehq.org --- Closing bugs fixed in 7.18.
https://bugs.winehq.org/show_bug.cgi?id=48487
Michael Stefaniuc mstefani@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|--- |7.0.x
https://bugs.winehq.org/show_bug.cgi?id=48487
Michael Stefaniuc mstefani@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|7.0.x |---
--- Comment #8 from Michael Stefaniuc mstefani@winehq.org --- Removing the 7.0.x milestone from bug fixes included in 7.0.2.