Stefan Leichter <[EMAIL PROTECTED]> writes:

> + * Note
> + *   observed unter win2k:
> + *   1. when the function is called to get the required buffer size, the 
> value of
> + *   the returned parameter needed is big enough to hold the strings as 
> WCHARs(!)

It's not WCHARs, it's two A chars per W char to leave enough room for
the conversion. I don't see you doing that in the code.

> +        case SERVICE_CONFIG_DESCRIPTION:
> +            {   LPSERVICE_DESCRIPTIONA configA = (LPSERVICE_DESCRIPTIONA) 
> buffer;
> +                LPSERVICE_DESCRIPTIONW configW = (LPSERVICE_DESCRIPTIONW) 
> bufferW;
> +                *needed = sizeof(SERVICE_DESCRIPTIONA);
> +                if (configW->lpDescription) {
> +                    DWORD sz;
> +                    configA->lpDescription = (LPSTR)(configA + 1);
> +                    sz = WideCharToMultiByte( CP_ACP, 0, 
> configW->lpDescription, -1,
> +                             configA->lpDescription, size - 
> sizeof(SERVICE_DESCRIPTIONA), NULL, NULL );
> +                    if (!sz) {
> +                        FIXME("WideCharToMultiByte failed for 
> configW->lpDescription\n");
> +                        ret = FALSE;
> +                        configA->lpDescription = NULL;
> +                        goto cleanup;

You need to update the needed size on buffer overflow.

-- 
Alexandre Julliard
[EMAIL PROTECTED]


Reply via email to