[Bug 49778] New: StrCmpLogicalW() incorrectly sorts numeric characters ('0'-'9') versus some symbols ('.' and others)

WineHQ Bugzilla wine-bugs at winehq.org
Fri Sep 4 06:56:35 CDT 2020


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

            Bug ID: 49778
           Summary: StrCmpLogicalW() incorrectly sorts numeric characters
                    ('0'-'9') versus some symbols ('.' and others)
           Product: Wine
           Version: unspecified
          Hardware: x86-64
                OS: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: shlwapi
          Assignee: wine-bugs at winehq.org
          Reporter: nailer592899230 at halestrom.net
      Distribution: ---

Created attachment 68088
  --> https://bugs.winehq.org/attachment.cgi?id=68088
sclw_test.cpp

StrCmpLogicalW() returns different results on Wine versus Windows 10 (1909
x86_64) when used to compare numeric and symbol characters.  '.' and '%' are
known culprits.

This is a strcmp()-like function, used for "natural" sorting of file listings. 
See
https://docs.microsoft.com/en-us/windows/win32/api/shlwapi/nf-shlwapi-strcmplogicalw

=== Example ===

Attached is a short .cpp file that can be compiled in Visual Studio Community
2019.  Alternatively a pre-compiled .exe is up at
https://halestrom.net/misc/wine/sclw_test.exe (sha1sum
4a71d6f03912ad4e735cc703d71cbd014ffa40e4)

When run on Windows 1909:  "Result of running StrCmpLogicalW() on 'always.dat'
and 'always2.dat': -1"
When run on Wine        :  "Result of running StrCmpLogicalW() on 'always.dat'
and 'always2.dat': 1"

The failing comes from comparing the '2' and '.' characters.

=== Impacts ===

Range from mostly harmless (different file listing orders in GUIs and TUIs) to
severe (using this sort order to imply precedence or versions of files, as is
my case where I discovered this problem).

APB version 3.5.0.0 (a free total-conversion for the game C&C Renegade) is
partially broken by this problem (cannot play online, old versions of game data
used), but there is a chance a patch I'm working on for it might be accepted as
a workaround.  https://w3dhub.com/#/games-apb

=== Thoughts on fix ===

I don't believe an exact spec for the full behaviour for StrCmpLogicalW()
exists.  Rumours are the inter-symbol sorting rules have changed between
Windows Versions too
http://archives.miloush.net/michkap/archive/2006/10/01/778990.html

In the very least: the '.' symbol needs to be given priority over numerals. 
Numbers and file-extensions are very common.

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