[v4 1/4] d3dx9: Remove redundant parameter size check in set_constants().

Paul Gofman gofmanp at gmail.com
Wed Jun 21 15:18:10 CDT 2017


On 06/21/2017 10:55 PM, Matteo Bruni wrote:
> 2017-06-19 11:24 GMT+02:00 Paul Gofman <gofmanp at gmail.com>:
>> Signed-off-by: Paul Gofman <gofmanp at gmail.com>
>> ---
>> v4:
>>      - added assert() for parameter size.
>> ---
>>   dlls/d3dx9_36/preshader.c | 10 +++++-----
>>   1 file changed, 5 insertions(+), 5 deletions(-)
>>
>> diff --git a/dlls/d3dx9_36/preshader.c b/dlls/d3dx9_36/preshader.c
>> index 2785ca3..76d6de9 100644
>> --- a/dlls/d3dx9_36/preshader.c
>> +++ b/dlls/d3dx9_36/preshader.c
>> @@ -1178,11 +1178,6 @@ static void set_constants(struct d3dx_regstore *rs, struct d3dx_const_tab *const
>>                           param_offset = i + j * info.major;
>>                       else
>>                           param_offset = i * info.minor + j;
>> -                    if (param_offset * sizeof(unsigned int) >= param->bytes)
>> -                    {
>> -                        WARN("Parameter data is too short, name %s, component %u.\n", debugstr_a(param->name), i);
>> -                        break;
>> -                    }
>>                       out[offset] = data[param_offset];
>>                   }
>>               }
>> @@ -1303,6 +1298,11 @@ static HRESULT merge_const_set_entries(struct d3dx_const_tab *const_tab,
>>               memmove(&const_tab->const_set[index + 1], &const_tab->const_set[i],
>>                       sizeof(*const_tab->const_set) * (const_tab->const_set_count - i));
>>               const_tab->const_set_count -= i - index - 1;
>> +            assert(param->bytes >= table_info[first_const->table].component_size
>> +                    * first_const->element_count
>> +                    * (first_const->direct_copy ? get_reg_components(first_const->table)
>> +                    * first_const->register_count
>> +                    : first_const->param->rows * first_const->param->columns));
> I don't think an assert() is correct here. You are comparing parameter
> size, which eventually depends on the effect data, with the constant
> size, which comes from the constant table and thus again the effect
> data. In general we shouldn't assert on invalid input data.
My point here that I don't see now how 'bytes' can be less than required 
for matrix / array. 'bytes' is computed during effect parse for such 
data and not read from the effect data. So the assert condition should 
never fire here regardless of effect data unless I am misssing something.
> Also by putting the assert() in merge_const_set_entries() you're not
> checking the non-array, non-struct constants.
It is checked more strictly with the recently added assert in 
init_set_constants_param() which was intended to check value size, 
that's why I had nothing to add there.





More information about the wine-devel mailing list