profile.c (kernel32): API broken

Paul Vriens paul.vriens.wine at gmail.com
Fri Aug 7 06:36:23 CDT 2009


Claudio Fontana wrote:
> On Thu, Aug 6, 2009 at 11:47 AM, Paul Vriens<paul.vriens.wine at gmail.com> wrote:
>> Claudio Fontana wrote:
>>> On Thu, Aug 6, 2009 at 9:38 AM, Paul Vriens<paul.vriens.wine at gmail.com>
>>> wrote:
>>>> Claudio Fontana wrote:
>>>>> Just a reminder to everyone involved with profile.c:
>>>>>
>>>>> I have watched the git log of the somewhat recent changes to
>>>>> kernel32/profile.c.
>>>>>
>>>>> The profile API does not work that way.
>>>>>
>>>>> The current situation is even worse than before, when the undocumented
>>>>> empty string section and empty keys were not implemented at all.
>>>>> The current situation leads to consistent INI file corruption when the
>>>>> applications use the undocumented empty string section and empty keys.
>>>>>
>>>>> I tried to explain how the API works under Windows many times. This is
>>>>> another casual attempt at giving you a reality check.
>>>>> If you are interested, you can contact me for further details, or look
>>>>> at the testcases in my last patch (search for profile.c / Claudio
>>>>> Fontana).
>>>>>
>>>> Found your patch from 2006 and tested on some Windows boxes.
>>> The testcases are more interesting than the functionality of the patch
>>> itself.
>>> I did the patch just to bring an application into running, it is not a
>>> stable solution.
>>>
>>> The testcases are the interesting thing.
>>>
>>>> The WritePrivateProfileStringA crashes on Windows 2003 for both added
>>>> tests.
>>>> Windows 98 doesn't crash btw.
>>>>
>>>> Both your fixes to the implementation seem to be for reading the ini
>>>> file.
>>> The writing is affected too.
>>>
>>>> Could you rewrite the test case so it succeeds on all platforms?
>>> I will try as soon as I get some time. However, I have no Windows 2003
>>> to test on.
>>>
>>>> So, for example creating the ini file with the empty section/key
>>>> 'manually'
>>>> and then trying to read (again on several platforms).
>>> Does Windows 2003 crash on _just_ the testcase? Or did you apply the
>>> whole patch?
>>> Also, the patch might not be compatible with the latest changes in
>>> profile.c.
>>>
>>> I'll try to make the patch a little bit better, but in the meantime it
>>> would be interesting
>>> to know if Windows 2003 behaves differently in this situation from the
>>> API point of view.
>>>
>>> Can you try just the testcase on Windows 2003 (with no other changes
>>> added besides the new tests)?
>> I only added the test cases (what else for a Windows box?). Both crash on
>> Windows 2003.
>>
>> I will check later (if time permits) with that newer patch you mentioned:
>> http://bugs2.winehq.org/attachment.cgi?id=6495
>>
> 
> Should it crash again, could you define 'crash' a little bit better for me?
> Maybe running under the windows debugger (windbg) or other debugger
> to understand where exactly the crash happens?
> 

I don't have the time to pursue this in great depth. The test crash 
means I get a drwtsn32 when running the tests.

I've installed the application successfully under Windows XP but your 
tests crash. This either means the app is not writing the ini-files with 
the help of WritePrivateProfileStringA or it has a crash handler.

Interestingly enough doing the same tests with 
WritePrivateProfileStringW don't crash!?

-- 
Cheers,

Paul.



More information about the wine-devel mailing list