[Bug 35149] New: RSA SecurID token v411 installer hangs during processing of EULA (large RTF passed twice: window text and richedit streamin callback)

wine-bugs at winehq.org wine-bugs at winehq.org
Tue Dec 17 05:31:42 CST 2013


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

            Bug ID: 35149
           Summary: RSA SecurID token v411 installer hangs during
                    processing of EULA (large RTF passed twice: window
                    text and richedit streamin callback)
           Product: Wine
           Version: 1.7.8
          Hardware: x86
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: msi
          Assignee: wine-bugs at winehq.org
          Reporter: focht at gmx.net
    Classification: Unclassified

Hello folks,

as mentioned here http://bugs.winehq.org/show_bug.cgi?id=35145#c2

--- quote ---
What version of the RSA client? I've never been able to install it, the msi
installer hangs.
--- quote ---

After choosing the location which decides if domestic or export EULA should be
displayed, the installer seems hang.
Actually it churns on one CPU with 100% trying to break up the complex RTF
passed in as one chunk with window text and the same content added a _second_
time using richedit streamin callback.

Source:
http://source.winehq.org/git/wine.git/blob/3271b982632e7730d6cee373f4c9a4af37012036:/dlls/msi/dialog.c#l1295

--- snip ---
1295 static UINT msi_dialog_scrolltext_control( msi_dialog *dialog, MSIRECORD
*rec )
1296 {
...
1308     hRichedit = LoadLibraryA("riched20");
1309
1310     style = WS_BORDER | ES_MULTILINE | WS_VSCROLL |
1311             ES_READONLY | ES_AUTOVSCROLL | WS_TABSTOP;
1312     control = msi_dialog_add_control( dialog, rec, szRichEdit20W, style );
...
--- snip ---

The large RTF content will be loaded from column 10 and passed as one chunk to
dialog_create_window().
Additionally MSI_RecordGetString() runs deformat_string() on that RTF which
also takes some time.

--- snip ---
781 /* everything except radio buttons */
782 static msi_control *msi_dialog_add_control( msi_dialog *dialog,
783                   MSIRECORD *rec, LPCWSTR szCls, DWORD style )
784 {
785     DWORD attributes;
786     LPCWSTR text, name;
787     DWORD exstyle = 0;
788
789     name = MSI_RecordGetString( rec, 2 );
790     attributes = MSI_RecordGetInteger( rec, 8 );
791     ext = MSI_RecordGetString( rec, 10 );
792
793     TRACE("%s, %s, %08x, %s, %08x\n", debugstr_w(szCls), debugstr_w(name),
794                   attributes, debugstr_w(text), style);
795
796     if( attributes & msidbControlAttributesVisible )
797         style |= WS_VISIBLE;
798     if( ~attributes & msidbControlAttributesEnabled )
799         style |= WS_DISABLED;
800     if( attributes & msidbControlAttributesSunken )
801         exstyle |= WS_EX_CLIENTEDGE;
802
803     dialog_map_events( dialog, name );
804
805     return dialog_create_window( dialog, rec, exstyle, szCls, name, text,
style, dialog->hwnd );
806 }
--- snip ---

All these things seem kind of redundant and inefficient because some lines
later the same content is added again, now with more efficient richedit
streamin callback mechanism (see msi_scrolltext_add_text()):

--- snip ---
1295 static UINT msi_dialog_scrolltext_control( msi_dialog *dialog, MSIRECORD
*rec )
1296 {
...
1325     /* subclass the static control */
1326     info->oldproc = (WNDPROC) SetWindowLongPtrW( control->hwnd,
GWLP_WNDPROC,
1327                            (LONG_PTR)MSIScrollText_WndProc );
1328     SetPropW( control->hwnd, szButtonData, info );
1329
1330     /* add the text into the richedit */
1331     text = MSI_RecordGetString( rec, 10 );
1332     if (text)
1333         msi_scrolltext_add_text( control, text );
1334
1335     return ERROR_SUCCESS;
1336 }
--- snip ---

If you avoid the first load via window text in scrolltext control case, the
EULA is displayed almost instantly.

===

The 'hickup' when adding the content twice - through window text and richedit 
streamin callback could be also subject to some bug.

With 'winetricks -q riched20' it still takes an awful lot time: ~25 seconds
with i5 2.60 GHz machine - but at least it finishes unlike Wine builtin (maybe
it does ... after 1 hour?)

$ sha1sum RSASecurIDToken411.zip 
e0e98c04bd8e1ba52fcf73e058703ccbb85d3252  RSASecurIDToken411.zip

$ du -sh RSASecurIDToken411.zip 
20M    RSASecurIDToken411.zip

$ wine --version
wine-1.7.8-232-g3bad812

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