[Bug 30808] ConEmu (Windows console emulator) v120527a reports error on startup: 'Failed to create main font! Requested: Lucida Console, Created: Liberation Sans'

wine-bugs at winehq.org wine-bugs at winehq.org
Tue Nov 24 11:49:22 CST 2015


https://bugs.winehq.org/show_bug.cgi?id=30808

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|Abandoned?                  |
             Status|UNCONFIRMED                 |NEW
                URL|http://code.google.com/p/co |http://sourceforge.net/proj
                   |nemu-maximus5/downloads/det |ects/conemu/files/OldReleas
                   |ail?name=ConEmu.120527a.7z& |es/ConEmuPack/
                   |can=2&q=                    |
            Summary|ConEmu: Fails to find       |ConEmu (Windows console
                   |console font                |emulator) v120527a reports
                   |                            |error on startup: 'Failed
                   |                            |to create main font!
                   |                            |Requested: Lucida Console,
                   |                            |Created: Liberation Sans'
     Ever confirmed|0                           |1

--- Comment #3 from Anastasius Focht <focht at gmx.net> ---
Hello folks,

I found old releases archived here:
http://sourceforge.net/projects/conemu/files/OldReleases/ConEmuPack/

--- snip ---
$ WINEDEBUG=+tid,+seh,+relay,+font wine ./ConEmu.exe >>log.txt 2>&1
...
0027:Call
gdi32.CreateFontW(00000010,00000008,00000000,00000000,00000190,00000000,00000000,00000000,00000001,00000004,00000000,00000003,00000000,0097d560
L"Lucida Console") ret=00443a9f
0027:trace:font:CreateFontIndirectExW (16 8 0 0 0 4 0 3 1) L"Lucida Console"   
=> 0x10041
0027:Ret  gdi32.CreateFontW() retval=00010041 ret=00443a9f
0027:Call gdi32.SelectObject(00020039,00010041) ret=00443ae1
0027:trace:font:freetype_SelectFont L"Lucida Console", h=16, it=0, weight=400,
PandF=00, charset=1 orient 0 escapement 0
0027:trace:font:freetype_SelectFont DC transform 1.000000 0.000000 0.000000
1.000000
0027:trace:font:freetype_SelectFont not in cache
0027:trace:font:freetype_SelectFont (it=0, bd=0) is selected for (it=0, bd=0)
0027:trace:font:freetype_SelectFont Chosen: L"Liberation Sans" L"Regular"
(L"/usr/share/fonts/liberation/LiberationSans-Regular.ttf"/(nil):0)
0027:trace:font:freetype_SelectFont font scale y: 1.000000
0027:trace:font:OpenFontFace
L"/usr/share/fonts/liberation/LiberationSans-Regular.ttf"/(nil), 0, 0 x 16
0027:trace:font:get_font_data Can't find table VDMX
0027:trace:font:OpenFontFace height 16 => ppem 14
0027:trace:font:select_charmap found cmap with platform_id 0, encoding_id 3
0027:trace:font:select_charmap found cmap with platform_id 3, encoding_id 1
0027:trace:font:freetype_SelectFont caching: gdiFont=0x158578  hfont=0x10041
0027:trace:font:add_to_cache font 0x158578
0027:trace:font:freetype_SelectFont 0x10041 L"Arial" 16 aa 1
0027:trace:font:update_font_code_page charset 0 => cp 1252
0027:Ret  gdi32.SelectObject() retval=0001001e ret=00443ae1
0027:Call gdi32.GetTextFaceW(00020039,00000020,0033fac0) ret=00443af4
0027:Ret  gdi32.GetTextFaceW() retval=00000010 ret=00443af4
0027:Call KERNEL32.lstrcmpiW(0097d560 L"Lucida Console",0033fac0 L"Liberation
Sans") ret=00443b0d
0027:Ret  KERNEL32.lstrcmpiW() retval=00000001 ret=00443b0d
0027:Call KERNEL32.lstrcmpiW(0097d560 L"Lucida Console",00499bdc L"Lucida
Console") ret=00443b72
0027:Ret  KERNEL32.lstrcmpiW() retval=00000000 ret=00443b72
0027:Call KERNEL32.lstrcpynW(0097d560,0033fac0 L"Liberation Sans",00000020)
ret=00443b83
0027:Ret  KERNEL32.lstrcpynW() retval=0097d560 ret=00443b83
...
0027:Call user32.MessageBoxW(0001007a,0097d0e0 L"Failed to create main
font!\nRequested: Lucida Console\nCreated: Liberation Sans\n\nFailed to create
border font!\nRequested: Lucida Console\nCreated: ",00490da8
L"ConEmu",00000040) ret=0041600b 
--- snip ---

Using some old source tree version, I found this snippet:

--- snip ---
...
if (GetTextFace(hDC, countof(szFontFace), szFontFace))
{
  if (!bRasterFont)
  {
    szFontFace[31] = 0;

    if (lstrcmpi(inFont->lfFaceName, szFontFace))
    {
      int nCurLen = _tcslen(szFontError);
      _wsprintf(szFontError+nCurLen, SKIPLEN(countof(szFontError)-nCurLen)
                L"Failed to create main font!\nRequested: %s\nCreated: %s\n",
inFont->lfFaceName, szFontFace);
      lstrcpyn(inFont->lfFaceName, szFontFace, countof(inFont->lfFaceName));
inFont->lfFaceName[countof(inFont->lfFaceName)-1] = 0;
      wcscpy_c(tmpFont.lfFaceName, inFont->lfFaceName);
    }
  }
}
...
--- snip ---

Using patch: https://bugs.winehq.org/attachment.cgi?id=50082
from: https://bugs.winehq.org/show_bug.cgi?id=32342#c19

helps a bit, only to run into more failing tests:

--- snip ---
0027:Call user32.DrawTextW(003a005d,0015758c L"Console font test failed!\nFont
is non public or non Unicode\nFont is not registered for use in
console",ffffffff,0033e7a0,00000e10) ret=7e4d05c6 
--- snip ---

Source snippet

--- snip ---
...
bool CSettings::CheckConsoleFontRegistry(LPCWSTR asFaceName)
{
    bool lbFound = false;
    HKEY hk;
    DWORD nRights = KEY_READ|WIN3264TEST((IsWindows64() ? KEY_WOW64_64KEY :
0),0);

    if (!RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows
NT\\CurrentVersion\\Console\\TrueTypeFont",
                      0, nRights, &hk))
    {
        wchar_t szId[32] = {0}, szFont[255]; DWORD dwLen, dwType; LONG iRc;

        if (gbIsDBCS)
        {
            DWORD idx = 0, cchName = countof(szId), dwLen = sizeof(szFont)-2;
            while ((iRc = RegEnumValue(hk, idx++, szId, &cchName, NULL,
&dwType, (LPBYTE)szFont, &dwLen)) == 0)
            {
                szId[min(countof(szId)-1,cchName)] = 0;
szFont[min(countof(szFont)-1,dwLen/2)] = 0;
                wchar_t* pszEnd;
                if (wcstoul(szId, &pszEnd, 10) && *szFont)
                {
                    if (lstrcmpi((szFont[0] == L'*') ? (szFont+1) : szFont,
asFaceName) == 0)
                    {
                        lbFound = true; break;
                    }
                }
                cchName = countof(szId); dwLen = sizeof(szFont)-2;
            }
        }

        if (!lbFound)
        {
            for (DWORD i = 0; i < 20; i++)
            {
                szId[i] = L'0'; szId[i+1] = 0; wmemset(szFont, 0, 255);

                if (RegQueryValueExW(hk, szId, NULL, &dwType, (LPBYTE)szFont,
&(dwLen = 255*2)))
                    break;

                if (lstrcmpi(szFont, asFaceName) == 0)
                {
                    lbFound = true; break;
                }
            }
        }

        RegCloseKey(hk);
    }

    return lbFound;
} 
...

    //wchar_t szCreatedFaceName[32] = {0};
    LOGFONT LF = gpSet->ConsoleFont;
    gpSetCls->nConFontError = 0;
//ConFontErr_NonSystem|ConFontErr_NonRegistry|ConFontErr_InvalidName;
    HFONT hf = CreateFontIndirect(&LF);

    if (!hf)
    {
        gpSetCls->nConFontError = ConFontErr_InvalidName;
    }
    else
    {
        LPOUTLINETEXTMETRICW lpOutl = gpSetCls->LoadOutline(NULL, hf);

        if (!lpOutl)
        {
            gpSetCls->nConFontError = ConFontErr_InvalidName;
        }
        else
        {
            LPCWSTR pszFamilyName = (LPCWSTR)lpOutl->otmpFamilyName;

            // Èíòåðåñóþò òîëüêî TrueType (âðîäå òîëüêî äëÿ TTF äîñòóïåí lpOutl
- ïðîâåðèòü
            if (pszFamilyName[0] != L'@'
                    && (gbIsDBCS || IsAlmostMonospace(pszFamilyName,
lpOutl->otmTextMetrics.tmMaxCharWidth, lpOutl->otmTextMetrics.tmAveCharWidth,
lpOutl->otmTextMetrics.tmHeight))
                    && lpOutl->otmPanoseNumber.bProportion ==
PAN_PROP_MONOSPACED
                    && lstrcmpi(pszFamilyName, gpSet->ConsoleFont.lfFaceName)
== 0
              )
            {
                BOOL lbNonSystem = FALSE;

                // Íåëüçÿ èñïîëüçîâàòü øðèôòû, êîòîðûå çàðåãèñòðèðîâàíû íàìè
(äëÿ ConEmu). Îíè äîëæíû áûòü ñèñòåìíûìè
                //for (std::vector<RegFont>::iterator iter =
gpSetCls->m_RegFonts.begin(); !lbNonSystem && iter !=
gpSetCls->m_RegFonts.end(); ++iter)
                for (INT_PTR j = 0; j < m_RegFonts.size(); ++j)
                {
                    const RegFont* iter = &(m_RegFonts[j]);

                    if (!iter->bAlreadyInSystem &&
                            lstrcmpi(iter->szFontName,
gpSet->ConsoleFont.lfFaceName) == 0)
                        lbNonSystem = TRUE;
                }

                if (lbNonSystem)
                    gpSetCls->nConFontError = ConFontErr_NonSystem;
            }
            else
            {
                gpSetCls->nConFontError = ConFontErr_NonSystem;
            }

            free(lpOutl);
        }
    }

    // Åñëè óñïåøíî - ïðîâåðèòü çàðåãèñòðèðîâàííîñòü â ðååñòðå
    if (gpSetCls->nConFontError == 0)
    {
        if (!CheckConsoleFontRegistry(gpSet->ConsoleFont.lfFaceName))
            gpSetCls->nConFontError |= ConFontErr_NonRegistry;
    } 
...
LPCWSTR CSettings::CreateConFontError(LPCWSTR asReqFont/*=NULL*/, LPCWSTR
asGotFont/*=NULL*/)
{
    sConFontError[0] = 0;

    if (!nConFontError)
        return NULL;

    SendMessage(gpSetCls->hwndConFontBalloon, TTM_SETTITLE, TTI_WARNING,
(LPARAM)(asReqFont ? asReqFont : gpSet->ConsoleFont.lfFaceName));
    wcscpy_c(sConFontError, L"Console font test failed!\n");
    //wcscat_c(sConFontError, asReqFont ? asReqFont : ConsoleFont.lfFaceName);
    //wcscat_c(sConFontError, L"\n");

    if ((nConFontError & ConFontErr_InvalidName))
    {
        if (asReqFont && asGotFont)
        {
            int nCurLen = _tcslen(sConFontError);
            _wsprintf(sConFontError+nCurLen,
SKIPLEN(countof(sConFontError)-nCurLen)
                      L"Requested: %s\nCreated: %s\n", asReqFont , asGotFont);
        }
        else
        {
            wcscat_c(sConFontError, L"Invalid font face name!\n");
        }
    }

    if ((nConFontError & ConFontErr_NonSystem))
        wcscat_c(sConFontError, L"Font is non public or non Unicode\n");

    if ((nConFontError & ConFontErr_NonRegistry))
        wcscat_c(sConFontError, L"Font is not registered for use in
console\n");

    sConFontError[_tcslen(sConFontError)-1] = 0;
    return sConFontError;
}
--- snip ---

ProtectionID scan:

--- snip ---
-=[ ProtectionID v0.6.7.0 OCTOBER]=-
(c) 2003-2015 CDKiLLER & TippeX
Build 31/10/15-14:35:10
Ready...
Scanning -> Z:\home\focht\Downloads\unpacked\ConEmu.exe
File Type : 32-Bit Exe (Subsystem : Win GUI / 2), Size : 843512 (0CDEF8h)
Byte(s) | Machine: 0x14C (I386)
Compilation TimeStamp : 0x4FC31D6E -> Mon 28th May 2012 06:38:38 (GMT)
[TimeStamp] 0x4FC31D6E -> Mon 28th May 2012 06:38:38 (GMT) | PE Header | - |
Offset: 0x000000F0 | VA: 0x004000F0 | -
[TimeStamp] 0x4FC31D6E -> Mon 28th May 2012 06:38:38 (GMT) | DebugDirectory | -
| Offset: 0x0008F344 | VA: 0x00490744 | -
-> File Appears to be Digitally Signed @ Offset 0CD200h, size : 0CF8h / 03320
byte(s)
[!] Executable uses SEH Tables (/SAFESEH) (88 calculated 88 recorded... 0
invalid addresses) 
[File Heuristics] -> Flag #1 : 00000100000001001100000000000100 (0x0404C004)
[Entrypoint Section Entropy] : 6.55 (section #0) ".text   " | Size : 0x8E711
(583441) byte(s)
[DllCharacteristics] -> Flag : (0x8100) -> DEP | TSA
[SectionCount] 4 (0x4) | ImageSize 0xE7000 (946176) byte(s)
[VersionInfo] Product Name : ConEmu
[VersionInfo] Product Version : 120527a
[VersionInfo] File Description : Console Emulator (x86)
[VersionInfo] File Version : 120527a
[VersionInfo] Original FileName : ConEmu.exe
[VersionInfo] Legal Copyrights : (C) 2006-2008 Zoin; (C) 2009-2011 Maximus5
[Debug Info] (record 1 of 1) (file offset 0x8F340)
Characteristics : 0x0 | TimeDateStamp : 0x4FC31D6E (Mon 28th May 2012 06:38:38
(GMT)) | MajorVer : 0 / MinorVer : 0 -> (0.0)
Type : 2 (0x2) -> CodeView | Size : 0x6C (108) 
AddressOfRawData : 0xA66A0 | PointerToRawData : 0xA52A0
CvSig : 0x53445352 | SigGuid FD7C93C3-2D66-488D-863CB86079ED2FC2
Age : 0x1 | Pdb :
T:\VCProject\FarPlugin\ConEmu\Maximus5\src\_VCBUILD\final.ConEmu.32W.vc9\ConEmu.pdb
[CompilerDetect] -> Visual C++ 9.0 (Visual Studio 2008)
[!] File appears to have no protection or is using an unknown protection
- Scan Took : 0.526 Second(s) [00000020Eh (526) tick(s)] [503 of 577 scan(s)
done]
--- snip ---

$ sha1sum ConEmu.120527a.7z 
c7563e635e7bde56297da7400726345e4fe54228  ConEmu.120527a.7z

$ du -sh ConEmu.120527a.7z 
1.4M    ConEmu.120527a.7z

$ wine --version
wine-1.8-rc1-37-g1d19eb1

Regards

-- 
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