winspool.drv: return maximum possible size of the buffer when no buffer specified

Vitaly Perov vitperov at etersoft.ru
Mon Oct 4 10:46:11 CDT 2010


On Monday 04 October 2010 19:03:21 Alexandre Julliard wrote:
> Vitaly Perov <vitperov at etersoft.ru> writes:
> > @@ -1398,7 +1398,7 @@ static void convert_printerinfo_W_to_A(LPBYTE out,
> > LPBYTE pPrintersW, dmA = DEVMODEdupWtoA(piW->pDevMode);
> >                      if (dmA) {
> >                          /* align DEVMODEA to a DWORD boundary */
> > -                        len = (4 - ( (DWORD_PTR) ptr & 3)) & 3;
> > +                        len = ptr ? (4 - ( (DWORD_PTR) ptr & 3)) & 3 :
> > 3;
>
> That doesn't make any sense.

May be I misunderstand something.

The bug is following:

CODE:
            GetJobW(hPrinter, job->job_id, 2, NULL, 0, &needed);
	    FIXME("needed = %d\n",needed);
            ji2 = HeapAlloc(GetProcessHeap(), 0, needed);
            result = GetJobW(hPrinter, job->job_id, 2, (LPBYTE)ji2, needed, 
&needed);
           FIXME("needed = %d\n",needed);

CONSOLE OUTPUT:
fixme:winspool:ScheduleJob needed = 366
fixme:winspool:ScheduleJob needed = 368

and result=false;

The patch fixes this bug.


-- 
Best regards,
Vitaly Perov



More information about the wine-devel mailing list