Jérôme Gardou wrote:
>>
>>
>> - Probing the BITMAPINFO and then passing the usermode buffer to the
>> internal and unprotected function is not enough. The buffer must be
>> copied.
>>    
> OK, it's safer this way.
It's not a matter of "safe, safer, safest". It's wrong vs correct.
Accessing the usermode buffer without SEH == unsafe!

>> - The BITMAPV5HEADER is only ~120 bytes and only used once per function
>> call, so putting the safe buffer on the stack is appropriate. The buffer
>> needs be large enough for V5 anyway, so why not fixup some values and
>> make it a full V5 header?
>>    
> No, all values added by V4/V5 headers are for ICM. If there is only a
> BITMAPINFOHEADER there, then we don't have to care about ICM. If we
> "convert" it to a V5 header, all values will be 0, that's not worth
> the effort.
There are also the color masks. In V4/V5 there are dedicated fields for
these masks, while in the BITMAPINFO they are in the bmiColors array.
If *bV5CSType == *LCS_sRGB or LCS_WINDOWS_COLOR_SPACE, then the other
fields are ignored, so here is no additional effort.

 
> The only "effort" to make here is to take care of where the color
> buffer is : bmi + bmi->bmiHeader.biSize and not bmi->bmiColors. Then
> check in some functions if we have a V4/V5 header to take care of the
> features they have. 
Exactly. And why do you want to multiply this effort? Why do you want to
handle this everywhere you use a BITMAPINFO instead of in exactly one
place?


Timo


_______________________________________________
Ros-dev mailing list
[email protected]
http://www.reactos.org/mailman/listinfo/ros-dev

Reply via email to