On Sun, Mar 14, 2010 at 3:08 PM, Vitaliy Margolen
<[email protected]> wrote:
> On 03/14/2010 11:04 AM, Andrew Nguyen wrote:
>> --- a/dlls/dxdiagn/container.c
>> +++ b/dlls/dxdiagn/container.c
>> @@ -97,12 +97,10 @@ static HRESULT WINAPI 
>> IDxDiagContainerImpl_EnumChildContainerNames(PDXDIAGCONTAI
>>
>>    p = This->subContainers;
>>    while (NULL != p) {
>> -    if (dwIndex == i) {
>> -      if (cchContainer <= strlenW(p->contName)) {
>> -     return DXDIAG_E_INSUFFICIENT_BUFFER;
>> -      }
>> +    if (dwIndex == i) {
>>        lstrcpynW(pwszContainer, p->contName, cchContainer);
>> -      return S_OK;
>> +      return (cchContainer <= strlenW(p->contName)) ?
>> +              DXDIAG_E_INSUFFICIENT_BUFFER : S_OK;
>>      }
>
> You sure it's "<="? You still need one more character for \0.
>
> Vitaliy.
>
>
>

Yes, because if cchContainer is the same value as what strlenW
returns, that means that the buffer can't store the null terminator,
so the function would correctly report DXDIAG_E_INSUFFICIENT_BUFFER.
lstrcpyn takes care of terminating the string at the appropriate
position.


Reply via email to