[PATCH 1/2] regedit: Overhaul Unicode line processing

Alexandre Julliard julliard at winehq.org
Tue Nov 22 06:37:58 CST 2016


Hugh McMaster <hugh.mcmaster at outlook.com> writes:

> On Tuesday, 22 November 2016 6:38 AM, Alexandre Julliard wrote:
>> Hugh McMaster writes:
>> 
>> > +        p = strpbrkW(line, line_endings);
>> > +        if (!p)
>> > +        {
>> > +            HeapFree(GetProcessHeap(), 0, buf);
>> > +            return NULL;
>> 
>> If there are no line endings you need to read more data instead of
>> failing.
>
> By the time p == NULL, we are already at the end of the buffer.
> And even if we weren't, the buffer would be increased and more data
> read in, on the second (and subsequent) loops.

There won't be a subsequent loop since you returned failure.

> This does assume, of course, that the .reg file format is valid. I'm not
> sure if .reg files are valid if they end without a newline sequence.
> I'll look into this and write some tests to check.

The function should of course be able to handle a file that doesn't end
in a newline, but the problem above would happen on any line that does
not fit into the existing buffer.

> The patch splits the buffer contents into lines. But we do end up
> reading the entire file into the buffer because 
> REG_VAL_BUF_SIZE is set to 4096 bytes. We could decrease
> this to 1024 bytes if you want. But, in many cases, I expect
> the same behaviour to occur.

The initial size won't make a difference, the problem is that you always
append data without removing it, so the buffer grows to the entire file
size.  It shouldn't need to grow bigger than the longest line.

-- 
Alexandre Julliard
julliard at winehq.org



More information about the wine-devel mailing list