[PATCH] winspool: Use all Fields from DRIVER_INFO_8A when we add a Printer Driver.

Huw Davies huw at codeweavers.com
Fri Nov 25 03:06:51 CST 2016


On Fri, Nov 25, 2016 at 12:49:40AM +0100, Detlef Riekenberg wrote:
> +    if ((Level > 7) && diA->pszzColorProfiles) {
> +        len = MultiByteToWideChar(CP_ACP, 0, diA->pszzColorProfiles, -1, NULL, 0);
> +        diW.pszzColorProfiles = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
> +        MultiByteToWideChar(CP_ACP, 0, diA->pszzColorProfiles, -1, diW.pszzColorProfiles, len);
> +    }

This is a 'multi-sz' string, so you need the same handling as 'pDependentFiles' here.

> +    if ((Level > 7) && diA->pszInfPath) {
> +        len = MultiByteToWideChar(CP_ACP, 0, diA->pszInfPath, -1, NULL, 0);
> +        diW.pszInfPath = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
> +        MultiByteToWideChar(CP_ACP, 0, diA->pszInfPath, -1, diW.pszInfPath, len);
> +    }
> +
> +    if ((Level > 7) && diA->pszzCoreDriverDependencies) {
> +        len = MultiByteToWideChar(CP_ACP, 0, diA->pszzCoreDriverDependencies, -1, NULL, 0);
> +        diW.pszzCoreDriverDependencies = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
> +        MultiByteToWideChar(CP_ACP, 0, diA->pszzCoreDriverDependencies, -1, diW.pszzCoreDriverDependencies, len);
> +    }

The same goes for pszzCoreDriverDependencies.

>      if (Level > 7) {
> -        FIXME("level %u is incomplete\n", Level);
> +        diW.dwPrinterDriverAttributes = diA->dwPrinterDriverAttributes;
> +        diW.ftMinInboxDriverVerDate = diA->ftMinInboxDriverVerDate;
> +        diW.dwlMinInboxDriverVerVersion = diA->dwlMinInboxDriverVerVersion;
>      }
>  
>      res = AddPrinterDriverExW(nameW, Level, (LPBYTE) &diW, dwFileCopyFlags);
> @@ -7018,6 +7061,11 @@ BOOL WINAPI AddPrinterDriverExA(LPSTR pName, DWORD Level, LPBYTE pDriverInfo, DW

You're leaking pHelpFile.

>      HeapFree(GetProcessHeap(), 0, diW.pszOEMUrl);
>      HeapFree(GetProcessHeap(), 0, diW.pszHardwareID);
>      HeapFree(GetProcessHeap(), 0, diW.pszProvider);
> +    HeapFree(GetProcessHeap(), 0, diW.pszPrintProcessor);
> +    HeapFree(GetProcessHeap(), 0, diW.pszVendorSetup);
> +    HeapFree(GetProcessHeap(), 0, diW.pszzColorProfiles);
> +    HeapFree(GetProcessHeap(), 0, diW.pszInfPath);
> +    HeapFree(GetProcessHeap(), 0, diW.pszzCoreDriverDependencies);
>  
>      TRACE("=> %u with %u\n", res, GetLastError());
>      return res;



More information about the wine-devel mailing list