[PATCH 2/2] kernel32: Split A/W implementation of {Get,Write}PrivateProfileString().

Dmitry Timoshkov dmitry at baikal.ru
Tue Apr 30 01:05:45 CDT 2019


Jactry Zeng <jzeng at codeweavers.com> wrote:

> +static LPWSTR c2w(LPCSTR string)
> +{
> +    INT lenW;
> +    LPWSTR stringW = NULL;
> +
> +    if (!string)
> +        return stringW;
> +
> +    lenW = MultiByteToWideChar(1252, 0, string, -1, NULL, 0);
> +    if ((stringW = HeapAlloc(GetProcessHeap(), 0, lenW * sizeof(WCHAR))))
> +        MultiByteToWideChar(1252, 0, string, -1, stringW, lenW);
> +    return stringW;
> +}

As mentioned before tis will break a lot of apps that write profile strings
using system locale.

> @@ -1189,7 +1272,11 @@ START_TEST(profile)
>          "name2=\"val2\"\r\n"
>          "name3\r\n"
>          "name4=a\r\n"
> -        "[section2]\r\n",
> +        "[section2]\r\n"
> +        "[\xe6\xae\xb5\x31]\r\n"  /* Simplified Chinese in UTF-8 */
> +        "name5=\xe9\x85\x92\x2e\r\n"  /* Simplified Chinese in UTF-8 */
> +        "\xe5\xa7\x93=\xe6\x9b\xbe\x2e\r\n"  /* Simplified Chinese in UTF-8 */
> +        "name6=\xd7\x99\xd7\x99\xd7\x9f\x2e\r\n", /* Hebrew in UTF-8 */
>          "CR+LF");
>      test_GetPrivateProfileString(
>          "[section1]\r"
> @@ -1197,7 +1284,11 @@ START_TEST(profile)
>          "name2=\"val2\"\r"
>          "name3\r"
>          "name4=a\r"
> -        "[section2]\r",
> +        "[section2]\r"
> +        "[\xe6\xae\xb5\x31]\r"  /* Simplified Chinese in UTF-8 */
> +        "name5=\xe9\x85\x92\x2e\r"  /* Simplified Chinese in UTF-8 */
> +        "\xe5\xa7\x93=\xe6\x9b\xbe\x2e\r" /* Simplified Chinese in UTF-8 */
> +        "name6=\xd7\x99\xd7\x99\xd7\x9f\x2e\r", /* Hebrew in UTF-8 */

Why are you testing with UTF-8 encoded strings but the implementation
uses code page 1252? This is clearly broken.

Please add the convincing set of the tests first to show the problem, at
the moment I fail to see what exactly you are trying trying to fix, and
only then try to think about the possible ways to fix the spotted bug(s).

-- 
Dmitry.



More information about the wine-devel mailing list