ntdll/file.c: Fix a possible NULL dereferencing.

Rob Shearman robertshearman at gmail.com
Wed Aug 27 07:09:33 CDT 2008


2008/8/27 Nikolay Sivov <bunglehead at gmail.com>:
> Henri Verbeet wrote:
>> 2008/8/27 Nikolay Sivov <bunglehead at gmail.com>:
>>
>>> Markus Hitter wrote:
>>>
>>>> if (!attr || !attr->ObjectName) return STATUS_INVALID_PARAMETER;
>>>>
>>> Shouldn't this be splitted? It isn't safe to rely on evaluation order.
>>> Or is it a default compiler setting for us?
>>>
>>>
>> This is well defined in C. !attr will be evaluated first, and if it
>> evaluates to true, the rest of the condition won't be evaluated. This
>> is also known as short-circuit evaluation.
>>
>>
> I thought it's possible to override this: not a evaluation order of
> course but the completeness of
> evaluation for debug purpose.

All C89/C99-compliant compilers will always respect the order of
evaluation of the operands of the logical AND and OR operators. I
don't know what "debug purpose" you are referring to, but the code
generated for "if (!attr || !attr->ObjectName)" is guaranteed by the C
standard to never crash on a NULL pointer.

-- 
Rob Shearman



More information about the wine-devel mailing list