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.
